Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在C中的SQL查询中包含变量#_C#_Sql - Fatal编程技术网

C# 如何在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' ,

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


如何解决此问题?

您应该使用参数化查询作为确保代码安全可靠的第一步。
但是您的错误是由@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的示例。参数
已经有多个参数。在提问之前,你真的需要做一些研究。我使用了
@
作为字符串的其余部分,它起了作用,谢谢你的解决方案。我现在计划使用参数。