使用多行在C#代码中编写SQL查询

时间:2015-06-03 21:02:34

标签: c# sql c#-4.0

我用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+"'
)");

enter image description here

1 个答案:

答案 0 :(得分:8)

您应该删除该字符串连接并使用参数化查询。我只能从你的短代码中假设某些东西不像你(或编译器)所期望的那样,你用引号粘在一起的字符串值。例如,如果您的某个字符串值包含单个引号,则整个查询将失败并显示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+ @"'

但同样,这并不能保护您免受可能产生异常或对您的程序造成灾难性黑客攻击的格式错误的输入值的影响。所以,请不要以这种方式编写查询