Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net sql update命令的vb.net问题_Asp.net_Sql_Vb.net - Fatal编程技术网

Asp.net sql update命令的vb.net问题

Asp.net sql update命令的vb.net问题,asp.net,sql,vb.net,Asp.net,Sql,Vb.net,我正在寻找一些帮助,试图找出为什么我在vb.net中的更新命令上看到SQL错误,注意到我的SQL经验非常有限 我正在构建一个配置文件系统,该系统将在我们公司的其他几个工具中使用,作为配置文件系统的一部分,在页面加载时根据LDAP目录查询用户信息,并在页面标签中显示存储在变量中的数据 然后,用户可以选择创建新的配置文件(如果不存在),或者更新现有的配置文件(如果已经存在)。该代码基于使用用户员工id查询表来确定正确的操作 我的insert命令工作正常,但更新没有,下面是我的当前代码和错误 这是用于

我正在寻找一些帮助,试图找出为什么我在vb.net中的更新命令上看到SQL错误,注意到我的SQL经验非常有限

我正在构建一个配置文件系统,该系统将在我们公司的其他几个工具中使用,作为配置文件系统的一部分,在页面加载时根据LDAP目录查询用户信息,并在页面标签中显示存储在变量中的数据

然后,用户可以选择创建新的配置文件(如果不存在),或者更新现有的配置文件(如果已经存在)。该代码基于使用用户员工id查询表来确定正确的操作

我的insert命令工作正常,但更新没有,下面是我的当前代码和错误

这是用于创建新条目的insert语句,可以正常工作

    Protected Sub btnInsert_Click(sender As Object, e As EventArgs) Handles btnInsert.Click
    Try
        Dim con As New SqlConnection
        Dim cmd As New SqlCommand

        con.ConnectionString = "Data Source="server" Catalog=usertable;Integrated Security=True"

        con.Open()
        cmd.Connection = con

        cmd.CommandText = "INSERT INTO Profile (FirstName, LastName, Email, Telephone, EmployeeID, NTLogin) VALUES ('" & lblFirstName.Text & "','" & lblLastName.Text & "','" & lblEmail.Text & "','" & lblPhone.Text & "','" & lblEID.Text & "','" & lblNT.Text & "')"

        cmd.ExecuteNonQuery()
        btnInsert.Enabled = False
        lblValid.Text = "Record Inserted Successfully"
        con.Close()
    Catch ex As System.Exception
        lblValid.Text = (ex.Message)

    End Try
以下是给出错误的更新代码:

Protected Sub btnUpdate_Click(sender As Object, e As EventArgs) Handles btnUpdate.Click
    Try
        Dim con As New SqlConnection
        Dim cmd As New SqlCommand

        con.ConnectionString = "server;Initial Catalog=usertable;Integrated Security=True"
        con.Open()
        cmd.Connection = con

        cmd.CommandText = "UPDATE Profile (FirstName, LastName, Email, Telephone, EmployeeID, NTLogin) VALUES ('" & lblFirstName.Text & "','" & lblLastName.Text & "','" & lblEmail.Text & "','" & lblPhone.Text & "','" & lblEID.Text & "','" & lblNT.Text & "') Where [EmployeeID] = '" & lblEID.text & "'"

        cmd.ExecuteNonQuery()
        btnUpdate.Enabled = False
        lblValid.Text = "Record Updated Successfully"
        con.Close()
    Catch ex As System.Exception
        lblValid.Text = (ex.Message)
    End Try
End Sub
返回的异常错误为

    [SqlException (0x80131904): Incorrect syntax near '('.]
   System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction) +392
   System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose) +815
   System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady) +4515
   System.Data.SqlClient.SqlCommand.RunExecuteNonQueryTds(String methodName, Boolean async, Int32 timeout, Boolean asyncWrite) +1390
   System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(TaskCompletionSource`1 completion, String methodName, Boolean sendToPipe, Int32 timeout, Boolean asyncWrite) +538
   System.Data.SqlClient.SqlCommand.ExecuteNonQuery() +290
   newprofile.btnUpdate_Click(Object sender, EventArgs e) +759
   System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +155
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +3804

我不知所措,非常感谢您的帮助。

更新语法完全无效,正如@JBKing所说

更新语句的形式如下:

UPDATE myTableName SET field=new_value WHERE condition=some_value

另外,为了避免可能的注入,不要将字段值直接传递到SQL命令中。如@JBKing所述,使用参数更新语法完全无效

更新语句的形式如下:

UPDATE myTableName SET field=new_value WHERE condition=some_value
另外,为了避免可能的注入,不要将字段值直接传递到SQL命令中。使用参数

应该是这样的:

cmd.CommandText = "UPDATE Profile SET FirstName='"&lblFirstName.Text&"', LastName='"&lblLastName.Text&"', Email='"&lblEmail.Text&"', Telephone='"&lblPhone.Text&"', EmployeeID='"&lblEID.Text&"', NTLogin='"&lblNT.Text&"' Where [EmployeeID] = '" & lblEID.text & "'"
对于像O'Connor这样的姓氏,我会很小心,因为在大多数情况下,存储过程或参数是防止SQL注入攻击的首选,这是有原因的

应该是这样的:

cmd.CommandText = "UPDATE Profile SET FirstName='"&lblFirstName.Text&"', LastName='"&lblLastName.Text&"', Email='"&lblEmail.Text&"', Telephone='"&lblPhone.Text&"', EmployeeID='"&lblEID.Text&"', NTLogin='"&lblNT.Text&"' Where [EmployeeID] = '" & lblEID.text & "'"

对于像O'Connor这样的姓氏,我会小心,因为在大多数情况下,存储过程或参数是首选的,以防止SQL注入攻击,这是有原因的。感谢所有提供帮助的人。在共享的示例和链接之间,我能够重建我的命令,使其正确更新,并且现在使用参数化查询而不是直接insert语句(或者至少是我认为正确的语句)进行设置,并且运行正常

下面是我的最终代码

Try
        Dim con As New SqlConnection
        Dim cmd As New SqlCommand

        con.ConnectionString = "Data Source=server;Initial Catalog=database;Integrated Security=True"
        con.Open()
        cmd.Connection = con
        cmd.CommandText = ("UPDATE Profile SET FirstName = @FirstName, LastName = @LastName, Email = @Email, Telephone = @Telephone, EmployeeID = @EmployeeID, NTLogin = @NTLogin, Organization = @Organization, Permission = @Permission Where [EmployeeID] = '" & eID & "'")
        cmd.Parameters.Add("@FirstName", SqlDbType.VarChar).Value = lblFirstName.Text
        cmd.Parameters.Add("@LastName", SqlDbType.VarChar).Value = lblLastName.Text
        cmd.Parameters.Add("@Email", SqlDbType.VarChar).Value = lblEmail.Text
        cmd.Parameters.Add("@Telephone", SqlDbType.VarChar).Value = lblPhone.Text
        cmd.Parameters.Add("@EmployeeID", SqlDbType.VarChar).Value = lblEID.Text
        cmd.Parameters.Add("@NTLogin", SqlDbType.VarChar).Value = lblNT.Text
        cmd.Parameters.Add("@Organization", SqlDbType.VarChar).Value = lblOrg.Text
        cmd.Parameters.Add("@Permission", SqlDbType.VarChar).Value = "requestor"

        cmd.ExecuteNonQuery()
        con.close
        lblValid.Text = "Record Updated Successfully"
    Catch ex As System.Exception
        lblValid.Text = (ex.Message)
    End Try

谢谢

感谢所有提供帮助的人。在共享的示例和链接之间,我能够重建我的命令,使其正确更新,并且现在使用参数化查询而不是直接insert语句(或者至少是我认为正确的语句)进行设置,并且运行正常

下面是我的最终代码

Try
        Dim con As New SqlConnection
        Dim cmd As New SqlCommand

        con.ConnectionString = "Data Source=server;Initial Catalog=database;Integrated Security=True"
        con.Open()
        cmd.Connection = con
        cmd.CommandText = ("UPDATE Profile SET FirstName = @FirstName, LastName = @LastName, Email = @Email, Telephone = @Telephone, EmployeeID = @EmployeeID, NTLogin = @NTLogin, Organization = @Organization, Permission = @Permission Where [EmployeeID] = '" & eID & "'")
        cmd.Parameters.Add("@FirstName", SqlDbType.VarChar).Value = lblFirstName.Text
        cmd.Parameters.Add("@LastName", SqlDbType.VarChar).Value = lblLastName.Text
        cmd.Parameters.Add("@Email", SqlDbType.VarChar).Value = lblEmail.Text
        cmd.Parameters.Add("@Telephone", SqlDbType.VarChar).Value = lblPhone.Text
        cmd.Parameters.Add("@EmployeeID", SqlDbType.VarChar).Value = lblEID.Text
        cmd.Parameters.Add("@NTLogin", SqlDbType.VarChar).Value = lblNT.Text
        cmd.Parameters.Add("@Organization", SqlDbType.VarChar).Value = lblOrg.Text
        cmd.Parameters.Add("@Permission", SqlDbType.VarChar).Value = "requestor"

        cmd.ExecuteNonQuery()
        con.close
        lblValid.Text = "Record Updated Successfully"
    Catch ex As System.Exception
        lblValid.Text = (ex.Message)
    End Try

谢谢

更新使用不同的语法。有一些可能有用的细节。谢谢你们的指点和链接,你们给了我一些东西可以看,还有一些地方可以进一步提高我的知识,正确地做事。今晚我会花点时间把事情弄清楚。再次感谢!更新使用不同的语法。有一些可能有用的细节。谢谢你们的指点和链接,你们给了我一些东西可以看,还有一些地方可以进一步提高我的知识,正确地做事。今晚我会花点时间把事情弄清楚。再次感谢!您可以在代码中使用参数,而无需存储过程。您可以在代码中使用参数,而无需存储过程。不要太挑剔,但您应该在where语句中将employeeID作为参数传递;不要太吹毛求疵,但也应该在where语句中传递employeeID作为参数;