Tit*_*mer 9 sql vb.net parameters
我有这个代码来从VB中的文本框中的数据更新我的SQL数据库.我需要使用参数,以防文本中包含一个标记,'或引号"等.这就是我所拥有的:
dbConn = New SqlConnection("server=.\SQLEXPRESS;Integrated Security=SSPI; database=FATP")
dbConn.Open()
MyCommand = New SqlCommand("UPDATE SeansMessage SET Message = '" & TicBoxText.Text & _
"'WHERE Number = 1", dbConn)
MyDataReader = MyCommand.ExecuteReader()
MyDataReader.Close()
dbConn.Close()
Run Code Online (Sandbox Code Playgroud)
这是我从网上看到的参数设置参数的蹩脚尝试,我对此并不了解.
dbConn = New SqlConnection("server=.\SQLEXPRESS;Integrated Security=SSPI; database=FATP")
dbConn.Open()
MyCommand = New SqlCommand("UPDATE SeansMessage SET Message = @'" & TicBoxText.Text & _
"'WHERE Number = 1", dbConn)
MyDataReader = MyCommand.ExecuteReader()
MyDataReader.Close()
dbConn.Close()
Run Code Online (Sandbox Code Playgroud)
你怎么做到这一点?如果在运行代码时文本框中有"标记",则会崩溃.
das*_*ght 23
您正走在避开Bobby Tables的正确道路上,但您对@参数的理解是不完整的.
命名参数的行为类似于编程语言中的变量:首先,在SQL命令中使用它们,然后在VB.NET或C#程序中提供它们的值,如下所示:
MyCommand = New SqlCommand("UPDATE SeansMessage SET Message = @TicBoxText WHERE Number = 1", dbConn)
MyCommand.Parameters.AddWithValue("@TicBoxText", TicBoxText.Text)
Run Code Online (Sandbox Code Playgroud)
请注意命令的文本是如何自包含的:它不再取决于文本框中文本的值,因此用户不能通过插入自己的命令来破坏SQL.@TicBoxText成为变量的名称,代表命令文本中的值; AddWithValue提供价值的电话.在那之后,你ExecuteReader准备好了.
Joe*_*orn 10
这里有许多改进:
Using dbConn As New SqlConnection("server=.\SQLEXPRESS;Integrated Security=SSPI; database=FATP"), _
MyCommand As SqlCommand("UPDATE SeansMessage SET Message = @Message WHERE Number = 1", dbConn)
'Make sure to use your exact DbType (ie: VarChar vs NVarChar) and size
MyCommand.Parameters.Add("@Message", SqlDbType.VarChar).Value = TicBoxText.Text
dbConn.Open()
MyCommand.ExecuteNonQuery() ' don't open a data reader: just use ExecuteNonQuery
End Using 'Using block will close the connection for you
Run Code Online (Sandbox Code Playgroud)