附加信息:'s'附近的语法不正确[关闭]
Posted
技术标签:
【中文标题】附加信息:\'s\'附近的语法不正确[关闭]【英文标题】:Additional information: Incorrect syntax near 's' [closed]附加信息:'s'附近的语法不正确[关闭] 【发布时间】:2016-12-10 22:14:25 【问题描述】:你能告诉我我的错误在哪里吗?!? 我在任何 's' 附近都找不到任何不正确的语法!。 这是我的代码:
public static DataTable InsertConnect(ComboBox Site , ComboBox server , ComboBox Host , ComboBox Domain , Label Price)
SqlConnection cn = new SqlConnection();
cn.ConnectionString = Server.Connection;
cn.Open();
SqlCommand cmd = new SqlCommand();
cmd.Connection = cn;
cmd.CommandText = "insert into tblPrice(Site,Server,Host,Domain,Price)
values('" + Site.Text + "','" + server.Text + "','" + Host.Text + "','" + Domain.Text + "','" + Price.Text + "')'";
SqlDataAdapter da = new SqlDataAdapter(cmd.CommandText, cn);
DataTable dt = new DataTable();
da.Fill(dt);
return dt;
【问题讨论】:
为什么最后一个括号后面有'
?
我真的建议使用参数来避免sql注入,这里简单的例子:***.com/questions/17569051/…
@J.Pichardo 因为如果我不输入 ' 我将面临错误
@VorTex318 最后一个'
没有匹配项,很可能是导致错误的原因,如果不是,则错误可能在您要连接的字符串上,请参阅@Fabio 答案,使用@ 987654325@ 可以修复它。
【参考方案1】:
原因是您不使用 SqlParameter
将值传递给查询。
如果您使用了参数,那么您的查询中就不会出现像一些额外的'
字符这样的问题。
始终使用 SqlParameters。
public static DataTable InsertConnect(ComboBox Site , ComboBox server , ComboBox Host , ComboBox Domain , Label Price)
using (var cn = new SqlConnection(Server.Connection))
cn.Open();
using (var cmd = new SqlCommand())
cmd.Connection = cn;
cmd.CommandText = "insert into tblPrice(Site,Server,Host,Domain,Price) values (@Site, @Server, @Host, @Domain, @Price)";
var parameters = new[]
new SqlParameter ParameterName = "@Site", .SqlDbType = SqlDbType.VarChar, .Value = Site.text ,
new SqlParameter ParameterName = "@Server", .SqlDbType = SqlDbType.VarChar, .Value = server.text ,
new SqlParameter ParameterName = "@Host", .SqlDbType = SqlDbType.VarChar, .Value = Host.Text ,
new SqlParameter ParameterName = "@Domain", .SqlDbType = SqlDbType.VarChar, .Value = Domain.Text ,
new SqlParameter ParameterName = "@Price", .SqlDbType = SqlDbType.VarChar, .Value = Price.Text
cmd.Parameters.AddRange(parameters);
SqlDataAdapter da = new SqlDataAdapter(cmd);
DataTable dt = new DataTable();
da.Fill(dt);
return dt;
然后您可以使用SqlDataAdapter
的构造函数,它以SqlCommand
作为参数,因为您的cmd
包含运行查询所需的所有信息。
【讨论】:
【参考方案2】:问题可能在于包含撇号 (') 的参数之一。尝试打印出cmd.CommandText
,你会发现它不是一个有效的SQL命令。
在相关的说明中,这是 SQL 注入的基础。解决方案是不要通过连接值来构造 SQL 命令,尤其是字符串。相反,使用命令参数并构造参数化命令。
您可以在 MSDN 上了解更多信息:How to: Execute a Parameterized Query
【讨论】:
以上是关于附加信息:'s'附近的语法不正确[关闭]的主要内容,如果未能解决你的问题,请参考以下文章
EF Core 存储过程错误:'@p1' 附近的语法不正确 [关闭]
例外是 System.Data.SqlClient.SqlException:'9988' 附近的语法不正确 [关闭]
消息 102,级别 15,状态 1,第 1 行“日期”附近的语法不正确。在更新查询中[关闭]
执行 INSERT 时出现 SQL 错误:“s”附近的语法不正确 [重复]