[英]SQL exception incorrect syntax near 'G' what's the problem?
我有一个通过从 C# 插入值创建的 SQL 查询。
在 C# 中:
string command = "INSERT INTO Phones (devicename, batterylife, price, antutu, ImageURL)
VALUES (" + model + ", " + batterylife + ", " + price + ", " + antutu + ", " + imgURL + " )";
在解析后的 SQL 中:
INSERT INTO Phones (devicename, batterylife, price, antutu, ImageURL)
VALUES ( Samsung-Galaxy-S10-5G, 0, 0, 0,
cdn2.gsmarena.com/vv/bigpic/samsung-galaxy-s10-5g.jpg )
并且在尝试执行它时,Visual Studio 会引发以下异常:
System.Data.SqlClient.SqlException
HResult=0x80131904
Message='G' 附近的语法不正确。
Source=.Net SqlClient 数据提供者
此外,当我用一个词替换常规模型名称变量时,Visual Studio 会为没有位置帮助理解的小 g 抛出相同的异常。
正如其他人所指出的,您正在使用字符串连接来构建您的 SQL 命令,这将在您的代码中启用 SQL 注入。
请改用以下模式,该模式依赖于参数,因此不易受到这种攻击:
using System.Data.SqlClient;
using System.Data;
...
using (var cn = new SqlConnection("YourConnectionString"))
{
cn.Open();
using (var cm = cn.CreateCommand())
{
cm.CommandType = System.Data.CommandType.Text;
cm.CommandText =
"INSERT INTO Phones (devicename, batterylife, price, antutu, ImageURL) " +
"VALUES (@devicename, @batterylife, @price, @antutu, @ImageURL)";
cm.Parameters.Add("@devicename", SqlDbType.VarChar, 50).Value = "Samsung-Galaxy-S10-5G";
cm.Parameters.Add("@batterylife", SqlDbType.Int).Value = 0;
cm.Parameters.Add("@price", SqlDbType.Int).Value = 0;
cm.Parameters.Add("@antutu", SqlDbType.Int).Value = 0;
cm.Parameters.Add("@ImageURL", SqlDbType.VarChar, -1).Value = "cdn2.gsmarena.com/vv/bigpic/samsung-galaxy-s10-5g.jpg";
cm.ExecuteNonQuery();
}
}
您必须根据需要调整每个SqlParameter
的大小/类型。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.