将WithValue添加到SQL语句中?VB.Net
我有一堆AddWithValue语句。我一直在绞尽脑汁想办法把它们转换成SQL语句 这就是它现在的样子将WithValue添加到SQL语句中?VB.Net,sql,vb.net,oledb,ms-access-2013,Sql,Vb.net,Oledb,Ms Access 2013,我有一堆AddWithValue语句。我一直在绞尽脑汁想办法把它们转换成SQL语句 这就是它现在的样子 Dim updateStatement As String = "UPDATE Customers SET " & "Name = @NewName, " "WHERE Name = @OldName " Dim updateCommand As New OleDbCommand(updateStatement, connect
Dim updateStatement As String =
"UPDATE Customers SET " &
"Name = @NewName, "
"WHERE Name = @OldName "
Dim updateCommand As New OleDbCommand(updateStatement, connection)
updateCommand.Parameters.AddWithValue("@NewName", newCustomer.Name)
updateCommand.Parameters.AddWithValue("@OldName", oldCustomer.Name)
连接打开,连接关闭。
有人告诉我一种不同的方法
Dim SQL as String = "UPDATE Customers SET" &
"Name = '" Customer.Name "', "
但它拒绝这样做,说只有前两个双引号是它
“Name=”“Customer.Name“,”斜体表示代码为黑色而非红色,拒绝工作
我没有使用数据库,我只是从文件本身中提取它(就好像它在Access中一样)
尽你所能帮助我!我希望我能留下它,因为如果它没有坏,就不要修理它。但是我的老师有一种搞笑的方式来与人交往。您缺少了一些位置合适的字符串连接运算符和空格,无法正确使用语法:
Dim SQL as String = "UPDATE Customers SET " & "Name = '" & newCustomer.Name & "'"
但是,如果我将Customer.Name设置为“maliciousUser”;DROP TABLE Customers;-“
会发生什么情况,您可能已经注意到了这方面的安全问题?不同并不一定更好
检查以下内容:您缺少一些位置合适的字符串连接运算符和空格,无法正确使用语法:
Dim SQL as String = "UPDATE Customers SET " & "Name = '" & newCustomer.Name & "'"
但是,如果我将Customer.Name设置为“maliciousUser”;DROP TABLE Customers;-“
会发生什么情况,您可能已经注意到了这方面的安全问题?不同并不一定更好
检查一下:我不会给出如何正确连接查询(即将文本值连接到查询中)的答案,因为连接查询不是正确的方法 正确的方法是您最初使用的方法:使用参数 如果将文字值放入查询中,则会出现以下问题:
- 您的代码易受攻击。这个理由足以让人永远不推荐它
- 您可能在类型转换方面有问题,例如,当您将值作为字符串传递时,日期、时间、数字的转换必须由数据库系统转换为正确的数据类型
- 您的代码易受攻击。这个理由足以让人永远不推荐它
- 您可能在类型转换方面有问题,例如,当您将值作为字符串传递时,日期、时间、数字的转换必须由数据库系统转换为正确的数据类型
- 不要这样做永远。它使您容易受到称为Sql注入的非常严重的安全问题的攻击
如果您希望以不同的方式添加参数,我可以为您提供一种实际改进代码的方法:
Dim updateStatement作为字符串=
“更新客户集”&
Name=@NewName
“其中Name=@OldName”
'您还应该以这种方式创建连接
使用updateCommand作为新的OleDbCommand(updateStatement,connection)
“我不得不猜测你的DB类型和长度
updateCommand.Parameters.Add(“@NewName”,OleDbType.VarChar,50)。Value=newCustomer.Name
updateCommand.Parameters.Add(“@OldName”,OleDbType.VarChar,50)。Value=oldCustomer.Name
updateCommand.ExecuteOnQuery()
终端使用
使用
.AddWithValue()
时可能会遇到某些问题,因为它会迫使.Net猜测参数的数据库类型。有时,.Net会猜错。即使它猜错了,大多数情况下,事情通常仍然有效,但可能发生的情况是,性能将受到严重影响,因为类型不匹配会导致每行转换或中断索引的使用。不要这样做永远。它使您容易受到称为Sql注入的非常严重的安全问题的攻击
' Add CustomerID parameter for WHERE clause.
command.Parameters.Add("@ID", SqlDbType.Int)
command.Parameters("@ID").Value = customerID
' Use AddWithValue to assign Demographics.
' SQL Server will implicitly convert strings into XML.
command.Parameters.AddWithValue("@demographics", demoXml)
如果您希望以不同的方式添加参数,我可以为您提供一种实际改进代码的方法:
Dim updateStatement作为字符串=
“更新客户集”&
Name=@NewName
“其中Name=@OldName”
'您还应该以这种方式创建连接
使用updateCommand作为新的OleDbCommand(updateStatement,connection)
“我不得不猜测你的DB类型和长度
updateCommand.Parameters.Add(“@NewName”,OleDbType.VarChar,50)。Value=newCustomer.Name
updateCommand.Parameters.Add(“@OldName”,OleDbType.VarChar,50)。Value=oldCustomer.Name
updateCommand.ExecuteOnQuery()
终端使用
使用.AddWithValue()
时可能会遇到某些问题,因为它会迫使.Net猜测参数的数据库类型。有时,.Net会猜错。即使它猜错了,通常情况下大部分时间仍然有效,但可能发生的情况是性能将受到显著影响,因为类型不匹配会强制每行转换或中断索引的使用
' Add CustomerID parameter for WHERE clause.
command.Parameters.Add("@ID", SqlDbType.Int)
command.Parameters("@ID").Value = customerID
' Use AddWithValue to assign Demographics.
' SQL Server will implicitly convert strings into XML.
command.Parameters.AddWithValue("@demographics", demoXml)
您原来的方式是正确的。不过,不要尝试连接查询。它使代码容易受到SQL注入的攻击。谁告诉你的更好?想象一下,
Customer.Name=“ABC”;从客户中删除--”代码>我知道原来的方法是正确的。我应该学习不同的方法。相信我。我宁愿保持原样。这不仅仅是因为原作是正确的。这个“新”的替代品是可怕的,可怕的,错误的。使用字符串连接将数据放入这样的查询中是不合适的。您最初的方法是正确的。不过,不要尝试连接查询。它使代码容易受到SQL注入的攻击。谁告诉你的更好?想象一下,Customer.Name=“ABC”;从客户中删除--”代码>我知道原来的方法是正确的。我应该学习不同的w