我的添加按钮SQL Server Management Studio和Visual Basic 2010中出错

时间:2013-10-18 14:13:46

标签: sql sql-server visual-studio-2010

以下是我在代码中无法使用插入查询的内容我的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有人可以帮助我吗?

1 个答案:

答案 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))