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

Tom*_*Tom 1 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+"'
)");
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

Ste*_*eve 8

您应该删除该字符串连接并使用参数化查询.我只能从你的短代码中假设某些东西不像你(或编译器)所期望的那样,你用引号粘在一起的字符串值.例如,如果您的某个字符串值包含单引号,则整个查询将失败并显示Syntax Error.相反,参数化查询会删除引号中的任何问题,并使您的查询免于Sql注入(并且更容易理解正在发生的事情)

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();
}
Run Code Online (Sandbox Code Playgroud)

说,在你编辑之后,我们可以很容易地看到红色波浪线指向的错误.它是由这些线上的坏线结束引起的

....'"+emp.BLOODGROUP+"',
....'"+emp.MOBILE+"'
Run Code Online (Sandbox Code Playgroud)

你应该改变它们

....'"+emp.BLOODGROUP+"',"
....'"+emp.MOBILE+"'"
Run Code Online (Sandbox Code Playgroud)

对编译器来说是正确的.@当您使用+运算符连接字符串时,将逐字符号的效果终止,如果您想省略上面一行中的结束双引号,则需要再次重复该字符串.这会导致这种可怕且容易出错的语法:

....'"+emp.BLOODGROUP+ @"',
....'"+emp.MOBILE+ @"'
Run Code Online (Sandbox Code Playgroud)

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