我在我的 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' ,
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";
Run Code Online (Sandbox Code Playgroud)
的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";
Run Code Online (Sandbox Code Playgroud)
正如我所说,推荐的做法是使用参数而不是字符串连接
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);
.....
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1438 次 |
| 最近记录: |