在SQL Server

时间:2018-03-24 01:46:29

标签: sql-server vb.net visual-studio visual-studio-2017

我将一个SQL语句放入visual中的按钮,使其在数据库中插入数据,当我触摸它时,会发生以下错误:

  

从字符串“Insert into TBL_Usuario_102 valu”转换为“Double”类型无效。

这是按钮中的代码:

 Private Sub Guardar_Click(sender As Object, e As EventArgs) Handles Guardar.Click
    If NombreDePersona.Text <> "" And Cedula.Text <> "" And RepetirContraseña.Text <> "" And Contraseña.Text <> "" Then
        If (RepetirContraseña.Text = Contraseña.Text) Then


            instruccionSQL = New SqlClient.SqlCommand("Insert into TBL_Usuario_102 values" +
            "(" + Cedula.Text + "," +
            NombreDePersona.Text + "," + 3 +
            "," + Contraseña.Text + "," +
            FechaInclusion.Text + "," + 0 +
            "," + FechaInclusion.Text + "," + 3 + ")")

            MsgBox("Datos Guardados Correctamente")
            Cedula.Clear()
            NombreDePersona.Clear()
            Contraseña.Clear()
            RepetirContraseña.Clear()


        Else
            MsgBox("Las contraseñas no coinciden")
        End If
    Else
        MsgBox("Escriba en Cada Campo")
    End If

End Sub

SQL连接在一个模块中,它运行良好,因为当我在SQL Server中手动插入数据时,登录工作正常。

数据库表中的数据类型按此顺序

  1. VARCHAR(15)
  2. varchar(20)
  3. int
  4. varchar(50)
  5. datetime
  6. datetime
  7. INT

1 个答案:

答案 0 :(得分:1)

创建这样的SQL字符串是危险的,因为它可能导致SQL injection attacks。通常建议使用命令参数;但是,您也可以通过加倍来转义字符串中的单引号。这应该使这种攻击变得不可能。命令参数还具有以下优点:您不必关心字符串(并转义它们),数字,布尔值和日期的格式。例如。见:How to pass a parameter from vb.net

就像现在一样,SQL语句还有另一个问题。字符串必须用单引号括起来。也可以使用[class*="col-"] { max-width: 100%; flex-basis: 100% } 进行字符串连接。不是&(这是+,它让VB认为你想要添加+)。

您的文字和数字输入的类型似乎与表格中的类型不一致(DoublesNombreDePersona?)并且您要插入varchar(20)两次。

我还会明确指定列名

FechaInclusion

最后,你不执行你的命令。打开连接后:

INSERT INTO TBL_Usuario_102 (column_name1, column_name2, ...) values ('a text', 3, ...)