Formato de fecha en columna de datatable + problema al guardar

23/05/2008 - 17:31 por Rony De Sousa | Informe spam
Hola que tal amigos!

Mi problema es el siguiente, tengo un DataTable el cual creo de la siguiente
manera:

_SqlConnection.ConnectionString = "StringCadenaConexion";
SqlDataAdapter _SqlDataAdapter = new SqlDataAdapter();
_SqlDataAdapter.SelectCommand = new SqlCommand("Select * From tabla1");
_SqlDataAdapter.SelectCommand.CommandType = CommandType.Text;
_SqlDataAdapter.SelectCommand.Connection = _SqlConnection;

DataSet _DataSet = new DataSet();
_SqlDataAdapter.Fill(_DataSet, "tabla");
DataTable _DataTable = _DataSet.Tables["tabla"];

return _DataTable;

Esto lo tengo en una función dentro de un servicio web, ya que estoy
trabajando en una aplicación para dispositivos móviles, entonces desde la
aplicación tengo eso:

private DataTable DT = new DataTable();
DT = MiServicioWeb.Funcion();

Donde "Funcion" es el código que coloque más arriba, la función que retorna
el datatable..
Hasta aqui todo marcha bien, el problema lo tengo cuando intento guardar en
la base de datos (SQL Server 2005), ya que hay un campo de tipo Datetime en
la BD SQL el cual cuando se ejecuta el procedimiento almacenado queda de la
siguiente manera:

exec pa_MiSp @fecha = N'23/05/2008 02:30:00 a.m.' y me arroja este error:
"Error al convertir el tipo de datos nvarchar a datetime."
Esto es por el a.m.

La manera como mando a ejecutar el procedimiento y como lleno los valores en
el datatable es más o menos esta:

DT.Rows[0]["fecha"] = Convert.ToDateTime(txt_fecha.Text);

SqlDataAdapter _SqlDataAdapter = new SqlDataAdapter();
_SqlConnection.ConnectionString = "CadenaConexion";
_SqlDataAdapter.SelectCommand = new SqlCommand("pa_MiSp");
_SqlDataAdapter.SelectCommand.CommandType = CommandType.StoredProcedure;

_SqlDataAdapter.SelectCommand.Parameters.AddRange(sqlParams);
_SqlDataAdapter.SelectCommand.Connection = _SqlConnection;

DataSet _DataSet = new DataSet();
_SqlDataAdapter.Fill(_DataSet, "tabla");
DataTable _DataTable = _DataSet.Tables["tabla"];


¿Hay alguna manera de darle un formato a la columna del datatable para que
solo almacene la fecha?

Ya que:
txt_fecha.Text // El text de este control tiene: 23/05/2008
// Pero cuando hago esto:
DT.Rows[0]["fecha"] = Convert.ToDateTime(txt_fecha.Text);
// Verifico con un MessageBox el valor de la columna y tiene esto:
"5/23/08 02:30:00 a.m." Con la hora y el a.m.

He buscado varias formas de hacerlo, trabajando con la clase CultureInfo
pero la verdad aún no he dado con la manera de solucionar esto..

Gracias de antemano!

Preguntas similare

Leer las respuestas

#1 Sashka
23/05/2008 - 18:26 | Informe spam
Puedes usar SET DATEFORMAT DMY en el SP..

http://msdn.microsoft.com/es-es/lib...89491.aspx

O ésta solución de Guille...
http://www.mundoprogramacion.com/NE...ltura.aspx

Sashka

"Rony De Sousa" escribió en el
mensaje de noticias:
Hola que tal amigos!

Mi problema es el siguiente, tengo un DataTable el cual creo de la
siguiente
manera:

_SqlConnection.ConnectionString = "StringCadenaConexion";
SqlDataAdapter _SqlDataAdapter = new SqlDataAdapter();
_SqlDataAdapter.SelectCommand = new SqlCommand("Select * From tabla1");
_SqlDataAdapter.SelectCommand.CommandType = CommandType.Text;
_SqlDataAdapter.SelectCommand.Connection = _SqlConnection;

DataSet _DataSet = new DataSet();
_SqlDataAdapter.Fill(_DataSet, "tabla");
DataTable _DataTable = _DataSet.Tables["tabla"];

return _DataTable;

Esto lo tengo en una función dentro de un servicio web, ya que estoy
trabajando en una aplicación para dispositivos móviles, entonces desde la
aplicación tengo eso:

private DataTable DT = new DataTable();
DT = MiServicioWeb.Funcion();

Donde "Funcion" es el código que coloque más arriba, la función que
retorna
el datatable..
Hasta aqui todo marcha bien, el problema lo tengo cuando intento guardar
en
la base de datos (SQL Server 2005), ya que hay un campo de tipo Datetime
en
la BD SQL el cual cuando se ejecuta el procedimiento almacenado queda de
la
siguiente manera:

exec pa_MiSp @fecha = N'23/05/2008 02:30:00 a.m.' y me arroja este error:
"Error al convertir el tipo de datos nvarchar a datetime."
Esto es por el a.m.

La manera como mando a ejecutar el procedimiento y como lleno los valores
en
el datatable es más o menos esta:

DT.Rows[0]["fecha"] = Convert.ToDateTime(txt_fecha.Text);

SqlDataAdapter _SqlDataAdapter = new SqlDataAdapter();
_SqlConnection.ConnectionString = "CadenaConexion";
_SqlDataAdapter.SelectCommand = new SqlCommand("pa_MiSp");
_SqlDataAdapter.SelectCommand.CommandType = CommandType.StoredProcedure;

_SqlDataAdapter.SelectCommand.Parameters.AddRange(sqlParams);
_SqlDataAdapter.SelectCommand.Connection = _SqlConnection;

DataSet _DataSet = new DataSet();
_SqlDataAdapter.Fill(_DataSet, "tabla");
DataTable _DataTable = _DataSet.Tables["tabla"];


¿Hay alguna manera de darle un formato a la columna del datatable para que
solo almacene la fecha?

Ya que:
txt_fecha.Text // El text de este control tiene: 23/05/2008
// Pero cuando hago esto:
DT.Rows[0]["fecha"] = Convert.ToDateTime(txt_fecha.Text);
// Verifico con un MessageBox el valor de la columna y tiene esto:
"5/23/08 02:30:00 a.m." Con la hora y el a.m.

He buscado varias formas de hacerlo, trabajando con la clase CultureInfo
pero la verdad aún no he dado con la manera de solucionar esto..

Gracias de antemano!
Respuesta Responder a este mensaje
#2 Rony De Sousa
23/05/2008 - 21:26 | Informe spam
Puedes usar SET DATEFORMAT DMY en el SP..



Mmm intenté eso, pero igual, porque es que el error era por el a.m. o p.m.,
que hacía que la cadena fuece de caracteres y no una fecha válida.

O ésta solución de Guille...
http://www.mundoprogramacion.com/NE...ltura.aspx



Pues guiandome por está linea de código que está en el ejemplo:

cmd.Parameters.Add(New SqlParameter("@Fecha1", SqlDbType.DateTime))

Hice algo parecido, en la función que tengo en el servicio web donde guardo
los datos tengo un SqlParameter[] al que le asigno los parámetros de forma
dinámica y entonces antes de agregar el parámetro evalúo el tipo de datos, y
si se trata de un Datetime lo agrego asi:

if(_DataTable.Columns[i].DataType == System.Type.GetType("System.DateTime"))
{
sqlParams[i] = new
SqlParameter(wpDataTable.Columns[i].ToString(), SqlDbType.DateTime);
sqlParams[i].Value = _DataTable.Rows[0][i].ToString();
}

Y pues hasta ahora me va bien.. De todos modos tendré que documentarme un
poco más en el asunto.

Gracias. Saludos!
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida