我正在用C#代码编写SQL查询。但是它给出了一个错误。我该如何纠正?
private string sql = "";
sql = (@"insert into employee_master
(
NATIONALITY,RELIGION,BLOODGROUP,
ELECTORATE,PROVINCE,DISTRICT,MOBILE
)
values
(
'"+emp.NATIONALITY+"','"+emp.RELIGION+"','"+emp.BLOODGROUP+"',
'"+emp.ELECTORATE+"','"+emp.PROVINCE+"','"+emp.DISTRICT+"','"+emp.MOBILE+"'
)");
最佳答案
您实际上应该删除该字符串串联,并使用参数化查询。我只能从您的短代码中假设,您(或编译器)在用引号粘贴在一起的字符串值中所期望的不一样。例如,如果您的字符串值之一包含单引号,则整个查询将失败,并显示Syntax Error
。相反,参数化查询可以消除引号的任何问题,并使查询在Sql Injections中变得安全(并且更容易理解正在发生的事情)
private string sql = "";
sql = @"insert into employee_master
(
NATIONALITY,RELIGION,BLOODGROUP,
ELECTORATE,PROVINCE,DISTRICT,MOBILE
)
values
(
@nat,@rel,@blood,
@elect,@prov,@district,@mobile
)";
using (SqlConnection con = new SqlConnection(...constring here...))
using (SqlCommand cmd = new SqlCommand(sql, con))
{
con.Open();
cmd.Parameters.Add("@nat", SqlDbType.NVarChar).Value = "Nationality";
... continue adding other parameters like @rel, @blood etc... and their values
cmd.ExecuteNonQuery();
}
说,在您编辑之后,我们可以轻松地看到红色花体所指出的错误。这是由于这些行的行末尾不良引起的
....'"+emp.BLOODGROUP+"',
....'"+emp.MOBILE+"'
您应该将它们更改为
....'"+emp.BLOODGROUP+"',"
....'"+emp.MOBILE+"'"
对编译器来说是正确的。当您使用+运算符连接字符串时,逐字字符
@
的效果终止,并且如果要在上面的行中省略双引号,则需要再次重复。这导致这种可怕且易于出错的语法:....'"+emp.BLOODGROUP+ @"',
....'"+emp.MOBILE+ @"'
但是,这又不能保护您免受畸形的输入值的影响,这些输入值可能会生成异常或对程序造成灾难性的黑客攻击。因此,请不要以这种方式编写查询
关于c# - 用多行C#代码编写SQL查询,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30630657/