C# 如何在C中的SQL查询中包含变量#
我正在C代码中添加一个多行SQL代码,如下所示:C# 如何在C中的SQL查询中包含变量#,c#,sql,C#,Sql,我正在C代码中添加一个多行SQL代码,如下所示: sqlCode = @"SELECT w.objectID, w.attr1397 'LastName', w.attr1395 'FirstName', w.attr1396 'MiddleName', w.attr1404 'Gender', w.attr1436 'OtherName', convert(varchar,w.attr1402, 101) 'DOB' ,
sqlCode = @"SELECT
w.objectID,
w.attr1397 'LastName',
w.attr1395 'FirstName',
w.attr1396 'MiddleName',
w.attr1404 'Gender',
w.attr1436 'OtherName',
convert(varchar,w.attr1402, 101) 'DOB' ,
w.attr1401 'SSN',
d.employmentStatus
FROM [db].[table] w left outer join
(
WHERE w.attr1397 = '" + k + "'
AND
w.attr1395 = c
AND
w.attr1401 = s
ORDER BY 4, 2, 3";
k
、c
和s
是我想要使用的函数的变量,这就是发生的情况:
如何解决此问题?您应该使用参数化查询作为确保代码安全可靠的第一步。
但是您的错误是由@char前缀的逐字字符串中断引起的
sqlCode = @"SELECT
w.objectID,
w.attr1397 'LastName',
w.attr1395 'FirstName',
w.attr1396 'MiddleName',
w.attr1404 'Gender',
w.attr1436 'OtherName',
convert(varchar,w.attr1402, 101) 'DOB' ,
w.attr1401 'SSN',
d.employmentStatus
FROM [db].[table] w left outer join
(
WHERE w.attr1397 = '" + k + "'" +
" AND w.attr1395 = " + c +
" AND w.attr1401 = " + s +
" ORDER BY 4, 2, 3";
正如我所说,建议使用参数而不是字符串连接
sqlCode = @"SELECT
w.objectID,
w.attr1397 'LastName',
w.attr1395 'FirstName',
w.attr1396 'MiddleName',
w.attr1404 'Gender',
w.attr1436 'OtherName',
convert(varchar,w.attr1402, 101) 'DOB' ,
w.attr1401 'SSN',
d.employmentStatus
FROM [db].[table] w left outer join
(
WHERE w.attr1397 = @k
AND w.attr1395 = @c
AND w.attr1401 = @s
ORDER BY 4, 2, 3";
SqlCommand cmd = new SqlCommand(sqlCode, connection);
cmd.Parameters.AddWithValue("@k", k);
.....
使用参数化查询。有关示例,请参见
SqlCommand.Parameters
。(我希望参数化SQL在从C#访问数据库的任何合理介绍中都会出现。)编译时错误是因为第二个字符串文字不是逐字逐句的字符串文字,顺便说一句。k、C和s是我希望在SQL查询中使用的变量。第一个问题是,当您对第一个字符串使用@
时,您第二次没有使用它(在k
之后)。我看到了单个变量的示例,如何使用多个变量作为参数?@SiKni8:MSDN中SqlCommand的示例。参数
已经有多个参数。在提问之前,你真的需要做一些研究。我使用了@
作为字符串的其余部分,它起了作用,谢谢你的解决方案。我现在计划使用参数。