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

Write SQL Query in C# code with multiple lines

我正在用 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+ @"'

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