Mi SQL Server 2008 de la base de datos tiene una tabla con una columna de tipo de datos datetime.

Cuando trato de insertar valores en la datetime columna estoy recibiendo el error.

Sintaxis incorrecta cerca de ‘-‘

Mi datetime selector de formato personalizado yyyy-MM-dd e.g (2012-11-01)

Siguiente es el ejemplo de código que he usado para insertar datetime.

 System.DateTime myDate = default(System.DateTime);
 myDate = DateTimePickerPrint.Value;
 string query = string.Format("EXEC Save_Quotation_Bookshop '" + txt_QutationNo.Text + "','" + txt_CusCode.Text + "',#" + myDate + "#,");

Por favor, alguno tiene una idea ?

InformationsquelleAutor las | 2012-11-01

3 Comentarios

  1. 1

    Primero: DEJAR de la concatenación junto a su código SQL! Esta es una invitación para los ataques de inyección SQL, y es muy malo para el rendimiento, también de uso consultas parametrizadas lugar.

    Si lo hace, usted no tendrá el problema de datetime/string problemas de conversión, ya sea…..

    Segundo: el «seguro» formato de fecha-sólo DateTime en SQL Server es YYYYMMDDsin guiones – sólo este formato garantiza que se va a ejecutar en cualquier Servidor SQL server, independientemente de su idioma, regional y dateformat configuración.

    En tercer lugar. si desea ejecutar un procedimiento almacenado – me gustaría recomendar el uso de este enfoque:

    System.DateTime myDate = default(System.DateTime);
    myDate = DateTimePickerPrint.Value;
    
    using (SqlConnection con = new SqlConnection(your-connection-string-here))
    using (SqlCommand cmd = new SqlCommand("dbo.Save_Quotation_Bookshop", con))
    {
        //tell ADO.NET it's a stored procedure (not inline SQL statements)
        cmd.CommandType = CommandType.StoredProcedure;
    
        //define parameters
        cmd.Parameters.Add("@QuotationNo", SqlDbType.VarChar, 50).Value = txt_QutationNo.Text;
        cmd.Parameters.Add("@CustomerCode", SqlDbtype.VarChar, 25).Value = txt_CusCode.Text;
        cmd.Parameters.Add("@SaleDate", SqlDbType.DataTime).Value = myDate;
    
        //open connection, execute stored procedure, close connection again
        con.Open();
        cmd.ExecuteNonQuery();
        con.Close();
    }

    No uso EXEC ...... como en una línea de instrucción SQL – digo ADO.NET que eres la ejecución de un procedimiento almacenado, el suministro de los parámetros – y listo!

    • thnx por responder, Su trabajo mediante la eliminación de EXEC ADO.NET y ejecutar exhaustiva ADO.NET
  2. 1

    Envoltura de la fecha en comillas simples en lugar de #.

    Esta concatenación de cadenas es una inyección de SQL esperando a suceder. Uso SqlCommand con los parámetros de lugar, entonces usted no tiene que preocuparse acerca de la conversión de cadena de problemas

    • Thnx por responder, he utilizado SqlCommand con parámetros pero se da el siguiente error. Pero se puede poner un ejemplo de código para la Envoltura de la fecha en comillas simples en lugar de #
    • La conversión implícita de tipo de datos datetime decimal no está permitido. Utilizar la función de conversión para ejecutar esta consulta
  3. 0

    Probar este

    string query = String.Format("EXEC Save_Quotation_Bookshop '{0}','{1}','{2}'",txt_QutationNo.Text,txt_CusCode.Text, myDate);

    O

    string query = string.Format("EXEC Save_Quotation_Bookshop @QutationNo,@CusCode,@myDate");
    
    ...
    comm.Parameters.AddWithValue("@QutationNo", txt_QutationNo.Text);
    comm.Parameters.AddWithValue("@CusCode", txt_CusCode.Text);
    comm.Parameters.AddWithValue("@myDate", myDate);
    • He intentado, pero cuando me pongo solo qutation da Error : Error de conversión de tipo de datos varchar a decimal.
    • asegúrese de que usted está poniendo cada parámetro en su respectivo orden
    • Thnx por responder @codingbiz. Voy a probar esto.

Dejar respuesta

Please enter your comment!
Please enter your name here