参数化的SQL查询不起作用

时间:2016-03-14 21:43:28

标签: sql vb.net

我正试图让这个查询起作用,但它不起作用:

strQuery = "Insert Into StudentInfo (StudentSurname, StudentNumber) Values (@Surname, @StudentNo) Where StudentName=@Name"  

感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

如果要插入新记录,WHERE子句没有任何意义。它也不是有效的SQL语法。

您可以尝试以下操作:

strQuery = "Insert Into StudentInfo (StudentName, StudentSurname, StudentNumber) Values (@Name, @Surname, @StudentNo)"

要更新现有记录,请使用UPDATE语句:

strQuery = "Update StudentInfo SET StudentName=@Name, StudentSurname=@Surname WHERE StudentNumber=@StudentNo"

WHERE子句应该具有StudentNumber(而不是StudentName),因为这对每个学生来说都是唯一的。名称可能重复,会导致更新错误的记录。

答案 1 :(得分:0)

以下显示使用OleDb数据提供程序执行更新,如果您正在使用SQL-Server将OleDb更改为SqlClient,例如SqlConnection和SqlCommand。请注意如何设置命令文本,这需要Framework 3.5或更高版本。

Public Sub UpdateRow(
    ByVal StudentSurname As String,
    ByVal StudentNumber As Integer,
    ByVal StudentName As String)

    Using cn As New OleDbConnection("Your connection string")
        Using cmd As New OleDbCommand("", cn)
            cmd.CommandText =
                <SQL>
                    UPDATE StudentInfo 
                    SET 
                        StudentSurname = @StudentSurname,
                        StudentNumber = @StudentNumber 
                    WHERE 
                        StudentName = @StudentName
                </SQL>.Value

            cmd.Parameters.AddWithValue("@StudentSurname", StudentSurname)
            cmd.Parameters.AddWithValue("@StudentNumber", StudentNumber)
            cmd.Parameters.AddWithValue("@StudentName", StudentName)

            cn.Open()

            Dim Affected As Integer = CInt(cmd.ExecuteNonQuery())
            If Affected <> 1 Then
                ' we have a problem
            Else
                ' update successful
            End If

        End Using
    End Using
End Sub