Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





C# - Insertar un DateTime en SQL Server

Iniciado por KronoX, 16 de Agosto de 2007, 02:04:55 AM

« anterior - próximo »

KronoX

Buenas tardes

Disculpen que los moleste con algo tan sencillo, pero es que antes siempre cuando he insertardo un "DateTime" en la BD, con estas instrucciones ha entrado al "catch" (pero con otros tipos de datos no me genera este problema y excepto con el bit) y bueno hoy lo intenté después de mucho tiempo y me salió... pero ahora no sé que ha pasado que volvió a dejar de funcionar y ya estaba insertando bien, no creo haberle quitado nada... le he hecho seguimiento y no le encuentro explicación, si alguien le puede hacer alguna modificación que me ayude, se lo agradecería... y de paso si me enseñan a usar el bit, que según sé en el ".Net Framework" se toma como "Boolean", pero igual no funciona... muchas gracias por todo.

-------------------------------------------------------------------------------------

using System;
using System.Text;
using System.Collections;
using System.Data.SqlClient;

namespace SQL_Server_Sentences
{
   class CPruebaSet
   {
       #region Variables
       /*****************De conexión a la BD*****************/
       SqlConnection mv_mySqlConnection = new SqlConnection(
       "Server=localhost\\SQLEXPRESS;database=BDPrueba;Integrated Security=true;User Instance=false");
       /*****************Campos de la tabla******************/
       private DateTime mv_dtmFecha;
       #endregion
       #region Funciones
       /***********Funciones de Asignación de Valores**********/
       public void setFecha(DateTime p_dtmFecha)
       {
           mv_dtmFecha = p_dtmFecha;
       }
       /****************Función de Ingreso ******************/
       public bool setRegistro()
       {
           try
           {
               string l_strSqlCmd = "INSERT INTO TBPrueba(cmpFecha) VALUES('" + mv_dtmFecha + "')";
               SqlCommand l_mySqlCommand = new SqlCommand(l_strSqlCmd, mv_mySqlConnection);
               mv_mySqlConnection.Open();
               l_mySqlCommand.ExecuteScalar();
           }
           catch (SqlException)
           {
               return false;
           }
           finally
           {
               mv_mySqlConnection.Close();
           }
           return true;
       }
       #endregion
   }
}
l éxito no depende tanto del talento como de la energía y de la buena voluntad

KronoX

Bueno ya lo solucioné...pero quisiera que igual quien sepa el problema me saque de la duda...

Lo que hice fue esto...:

Cambié los datos de "DateTime's" por "string's" tanto en el programa como en la BD...

Jajaja pero no crean que eso no es solución... sólo lo hice para ver si la sentencia estaba mal... y no... ahí si insertó... pero bueno lo volví a poner tal y como lo he posteado en el anterior mensaje... y lo volví a correr y esta vez si insertó...

Díganme por favor... cuál es el problema... o por que me pasó esto. Es que no me gusta solucionar algo sin saber si realmente estará solucionado para siempre... no me gusta parchar las cosas....

Muchas gracias.
l éxito no depende tanto del talento como de la energía y de la buena voluntad

KronoX

Bueno ya lo solucioné...pero quisiera que igual quien sepa el problema me saque de la duda...

Lo que hice fue esto...:

Cambié los datos de "DateTime's" por "string's" tanto en el programa como en la BD...

Jajaja pero no crean que eso no es solución... sólo lo hice para ver si la sentencia estaba mal... y no... ahí si insertó... pero bueno lo volví a poner tal y como lo he posteado en el anterior mensaje... y lo volví a correr y esta vez si insertó...

Díganme por favor... cuál es el problema... o por que me pasó esto. Es que no me gusta solucionar algo sin saber si realmente estará solucionado para siempre... no me gusta parchar las cosas....

Muchas gracias.

P.D.: Si saben como hacer con el "bit" escríbanlo por favor.
l éxito no depende tanto del talento como de la energía y de la buena voluntad

BeRSeRKeR

Hola.

Al parecer se recomienda hacer uso de parámetros.

http://msdn2.microsoft.com/es-es/library/system.data.sqlclient.sqlcommand.parameters(VS.80).aspx

(Al parecer los paréntesis en la URL no le sientan bien al foro :))

Con eso evitas tener que formatear el tipo de dato manualmente, simplemente le pasas el dato y él ya se encarga de formatearlo correctamente.

Además parece ser que es más óptimo.

Saludos.
¡Si te buscan en nombre de la ley, huye en nombre de la libertad!!

Vicente

No has podido insertar la fecha como fecha porque el formato del ToString del datetime seguramente no es el formato de fecha que se espera tu BD. Como dice Ber para insertar fechas, bits o cualquier cosa usa mejor queries con parámetros.

Un saludo,

Vicente

ajmendoza

...VaLUES(convert(Datetime, '<string_de_la_fecha>' ))

bnl

El utilizar parametros tambien es util para evitar el SQL injection
Mi web: http://www.brausoft.com/
No sabían que era imposible, así que lo hicieron.

KronoX

Ok muchas gracias :) cómo les dije cambie todo para que inserte como string... y luego cambie todo al original que fue con "datetime" e insertó normalmente... con el mismo código que puse al inicio... voy a revisar la url que me indicaron, muchas gracias... por cierto el "Boolean" (en C#) si me insertó al "Bit" (en SQL Server). Pero hay quie hacer lo mismo que acá... cambiar a string todo... y luego todo a bit y boolean... pero investigaré de sus sugerencias apra no tener que hacer esto... que en realidad no le encuentro un significado pero que sirve. Muchas gracias.
l éxito no depende tanto del talento como de la energía y de la buena voluntad






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.