c# - 如何在 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' ,
    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是我想要使用的函数中的变量,这就是发生的情况:

enter image description here

如何解决?

最佳答案

您应该使用参数化查询作为第一步,以使您的代码安全可靠。
但你的错误是由 @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);
.....

关于c# - 如何在 C# 中的 SQL 查询中包含变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24700131/

相关文章:

sql - 按特定季度计算减法

sql - 显示前三个值以及所有其他值的总和

c# - 绑定(bind)自定义 DataGridHeader MVVM

c# - 从代码加载 WPF 中的图像

c# - 在没有事件源注册的情况下写入 Windows 应用程序事件日志

c# - Wix 更改 exe 安装程序图标

mysql - 按百分比排序汇总结果?

c# - 在尝试通过“联系我们”表格联系公司时识别发件人电子邮件 ID

Python:如何在 40 秒内更新 Google BigQuery 中的值?

sql - 无法更新或删除表中的行 (Postgres)