以下是我在代码中无法使用插入查询的内容我的SqlCommand
中出现错误,指出ExecuteNonQuery()
与值blah blah不匹配
这是我的代码
Dim con As New SqlClient.SqlConnection("Server=.\SQLExpress;AttachDBFilename=C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQLEXPRESS\MSSQL\DATA\Finals.mdf;Database=Finals;Trusted_Connection=Yes;")
Dim cmd As New SqlClient.SqlCommand
cmd.Connection = con
cmd.CommandText = "Insert Into [Finals].[dbo].[Nokia] Values ('" & Unit.Text & "'),('" & Price.Text & " '),('" & Stack.Text & "'),('" & Processor.Text & "'),('" & Size.Text & "'),('" & RAM.Text & "'),('" & Internal.Text & "'),('" & ComboBox1.Text & "')"
con.Open()
cmd.ExecuteNonQuery()
con.Close()
问题是cmd.CommandText
有人可以帮助我吗?
答案 0 :(得分:4)
您需要重写查询才能使用参数化查询。如果您的文本框包含单引号,这将避免解析问题,最重要的是,将删除任何Sql注入的可能性。
所以你的代码看起来像这样
Dim cmdText = "Insert Into [Finals].[dbo].[Nokia] Values (@unit, @price,@stack," & _
"@processor,@size,@ram,@internal,@lastvalue"
Using con As New SqlConnection(......)
Using cmd As New SqlCommand(cmdText, con)
con.Open()
cmd.Parameters.AddWithValue("@unit",Unit.Text )
cmd.Parameters.AddWithValue("@price",Price.Text)
cmd.Parameters.AddWithValue("@stack",Stack.Text)
cmd.Parameters.AddWithValue("@processor", Processor.Text)
cmd.Parameters.AddWithValue("@size",Size.Text)
cmd.Parameters.AddWithValue("@ram", RAM.Text)
cmd.Parameters.AddWithValue("@internal",Internal.Text)
cmd.Parameters.AddWithValue("@lastvalue", ComboBox1.Text)
cmd.ExecuteNonQuery()
End Using
End Using
说,请注意另外两个问题:
您没有在VALUES语句之前指定列列表。这意味着您需要为基础列的EXACT ORDER中名为Nokia AND的表中存在的每个列传递确切数量的参数。如果您忘记了一个参数,您将收到一个异常,如果您交换参数的顺序,则会在错误的列中写入数据(如果数据类型不匹配,则会有异常等待您)。
第二个问题涉及传递给查询的每个参数的数据类型。在您的情况下,您使用文本框的Text
属性,这意味着您正在为数据表中的每个列传递一个字符串。当然,如果列需要数值,则会出现不匹配错误。
例如,@price
参数可用于更新数据表中的十进制列,因此您需要在使用AddWithValue
方法添加参数之前将参数从字符串转换为十进制
cmd.Parameters.AddWithValue("@price",Convert.ToDecimal(Price.Text))