【问题标题】:How to include variable in a SQL query in C# [duplicate]如何在 C# 中的 SQL 查询中包含变量 [重复]
【发布时间】:2014-07-11 14:29:32
【问题描述】:

我在我的 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";

kcs 是我想要使用的函数的变量,这就是发生的情况:

我该如何解决?

【问题讨论】:

  • 使用参数化查询。有关示例,请参阅SqlCommand.Parameters。 (我希望参数化 SQL 可以在 any 合理地介绍从 C# 访问数据库。)您的编译时错误是因为您的第二个字符串文字不是逐字字符串文字,顺便说一句。跨度>
  • k、c 和 s 是我想在 sql 查询中使用的变量。
  • 嗯,第一个问题是当你使用@ 作为第一个字符串时,你没有使用它作为第二个字符串(在k 之后)。
  • 我看到了单个变量的例子,我如何使用多个变量作为参数?
  • @SiKni8:MSDN 中SqlCommand.Parameters 的示例已经有多个参数。你真的需要做一些研究之前提出问题。

标签: c# sql


【解决方案1】:

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

【讨论】:

  • 我使用@ 来处理字符串的其余部分,它有效,感谢您的解决方案。我现在正计划使用参数。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-10-27
  • 1970-01-01
  • 1970-01-01
  • 2020-05-08
  • 2021-01-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多