请你告诉我我的错误在哪里?!? 我在任何'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;
}
答案 0 :(得分:4)
原因是您没有使用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
包含运行查询所需的所有信息。
答案 1 :(得分:2)
问题可能在于其中一个包含撇号(')的参数。尝试打印cmd.CommandText
,您将看到它不是有效的SQL命令。
在相关的说明中,这是SQL注入的基础。解决方案不是通过连接值来构造SQL命令,尤其是字符串。而是使用命令参数并构造参数化命令。
您可以在MSDN上了解详情:How to: Execute a Parameterized Query