'System.Data.SqlClient.SqlException'

时间:2015-05-17 09:23:02

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

我正在编写一个代码,可以对存储在数据库中的一定数量的实验点进行插值或曲线拟合。此应用程序的一部分允许用户向数据添加新点。

这是代码的一部分:

Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    Dim connection As SqlConnection = New SqlConnection()
    connection.ConnectionString = "Data Source=.;Initial Catalog = Newtcf;Integrated Security=True"
    Dim sqlq As String = "Insert into Points (x-axis,y-axis,weight) Values (@x-axis,@y-axis,@weight)"
    Dim cmd As New SqlCommand(sqlq, connection)

    cmd.Parameters.Add("@x-axis", SqlDbType.Float).Value = TextBox1.Text
    cmd.Parameters.Add("@y-axis", SqlDbType.Float).Value = TextBox2.Text
    cmd.Parameters.Add("@weight", SqlDbType.Float).Value = TextBox3.Text

    connection.Open()
    cmd.ExecuteNonQuery()
    cmd.Parameters.Clear()
    connection.Close()
End Sub

我收到以下错误:

  

System.Data.dll中出现未处理的“System.Data.SqlClient.SqlException”类型异常

     

其他信息:' - '附近的语法不正确。

     

' - '附近的语法不正确。

这一行:

cmd.ExecuteNonQuery()

以绿色突出显示。老实说,我不知道问题是什么,或者“例外”是什么意思。我们的导师帮助不大。我真的很感激一些澄清。

2 个答案:

答案 0 :(得分:3)

这是因为特殊字符'-'。你应该分隔列名称。改为:

Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    Dim connection As SqlConnection = New SqlConnection()
    connection.ConnectionString = "Data Source=.;Initial Catalog = Newtcf;Integrated Security=True"
    Dim sqlq As String = "Insert into Points ([x-axis],[y-axis],[weight]) Values (@x,@y,@w)"
    Dim cmd As New SqlCommand(sqlq, connection)

    cmd.Parameters.Add("@x", SqlDbType.Float).Value = TextBox1.Text
    cmd.Parameters.Add("@y", SqlDbType.Float).Value = TextBox2.Text
    cmd.Parameters.Add("@w", SqlDbType.Float).Value = TextBox3.Text
    connection.Open()
    cmd.ExecuteNonQuery()
    cmd.Parameters.Clear()
    connection.Close()
End Sub

在此处查看详细信息https://technet.microsoft.com/en-us/library/ms176027%28v=sql.105%29.aspx

答案 1 :(得分:0)

如果列名中有连字符,则列必须用方括号括起来,即x轴变为[x轴]。

如果您运行查询

SELECT x-axis 
FROM BLAH 

实际上它会尝试从列axis中减去列x

我也会避免在@变量中使用非字母数字字符,除非它是下划线。

试试这个:

Dim sqlq As String = "Insert into Points ([x-axis],[y-axis],[weight]) Values (@x_axis,@y_axis,@weight)"