【问题标题】:Visual Basic when inserting data in SQL Server在 SQL Server 中插入数据时的 Visual Basic
【发布时间】:2018-03-24 01:46:28
【问题描述】:

我将SQL语句放入可视化按钮中,使其在数据库中插入数据,当我触摸它时,会发生此错误:

从字符串“插入 TBL_Usuario_102 值”到类型“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. 日期时间
  6. 日期时间
  7. int

【问题讨论】:

  • 1.您的代码对 Sql Injection hacking 完全开放。 2. 开启Option Strict。 3. VB.Net 的连接运算符是&amp; 而不是+。因为您的代码中有+ 3 +,VB 可能会尝试隐式尝试将其转换为数字形式,从而导致您的错误。
  • 这个问题可能是由于在字符串和数字之间使用'+'运算符(例如3)尝试使用字符串连接运算符&或字符串“3”

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


【解决方案1】:

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

现在,您的 SQL 语句还有另一个问题。字符串必须用单引号括起来。也使用&amp; 进行字符串连接。不是+(这是+,让VB认为您要添加Doubles)。

您输入的文本和数字类型似乎与表中的类型不匹配(是NombreDePersonavarchar(20)?),并且您插入了两次FechaInclusion

我还会明确指定列名

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

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

instruccionSQL.ExecuteNonQuery()

【讨论】:

    猜你喜欢
    • 2012-02-29
    • 1970-01-01
    • 2018-02-18
    • 1970-01-01
    • 2013-01-17
    • 2014-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多