我正在用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/

10-12 14:54
查看更多