Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.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# 基于参数将数据从SQL表拉入DataTable_C#_Sql Server_Datatable_Tuples - Fatal编程技术网

C# 基于参数将数据从SQL表拉入DataTable

C# 基于参数将数据从SQL表拉入DataTable,c#,sql-server,datatable,tuples,C#,Sql Server,Datatable,Tuples,我正在一个项目中扩展一个类,在这个项目中,我需要将特定数据从SQL表拉入DataTable。以前,数据都是在SQL过程中计算和修改的,但我已经对其进行了修改,以便将中的计算数据传递到一个新表中。现在,我正在编写一个方法,该方法将根据数据的ID值将数据从数据库中取出 很多代码都是由另一位开发人员编写的,他对元组有一种我不太了解的东西,这让我有点困惑。从逻辑上讲,我也做过类似的事情,但我只拉过一整张桌子,而不仅仅是一排 这是我第一次使用该方法: public DataTable ReadSqlTa

我正在一个项目中扩展一个类,在这个项目中,我需要将特定数据从SQL表拉入DataTable。以前,数据都是在SQL过程中计算和修改的,但我已经对其进行了修改,以便将中的计算数据传递到一个新表中。现在,我正在编写一个方法,该方法将根据数据的ID值将数据从数据库中取出

很多代码都是由另一位开发人员编写的,他对元组有一种我不太了解的东西,这让我有点困惑。从逻辑上讲,我也做过类似的事情,但我只拉过一整张桌子,而不仅仅是一排

这是我第一次使用该方法:

 public DataTable ReadSqlTableToDataTable( List<Tuple<string, string>> parameterValueMappings, DataTable dt)
    {
        string query = "SELECT *  FROM dbo.Mytable WHERE IdValue= ";

        using (var conn = new SqlConnection(_config.ConnectionString))
        {
            conn.Open();

            SqlCommand cmd = new SqlCommand(query + parameterValueMappings, conn);


            using (var da = new SqlDataAdapter(cmd))
            {
                da.SelectCommand.CommandTimeout = 600;
                da.Fill(dt);
            }
        }                           
        return dt;
    }
通过文件读入
idValue
,并将其抛出到我的新SQL表中


现在,当我运行这个时,我什么也没有得到。我的表中有数据,所以我知道这不是问题所在。我觉得问题在于我如何使用元组。我设置正确了吗?如果没有,我做错了什么

您误用了
SqlCommand
。您应该将查询指定为字符串,并使用
SqlCommand.parameters
传递所有参数,而不是串联字符串。 请参见示例

你的情况应该是这样的。没有元组,没有连接

string query = "SELECT *  FROM dbo.Mytable WHERE IdValue = @IDValue;";

SqlCommand command = new SqlCommand(query , conn);
command.Parameters.Add("@IDValue", SqlDbType.Int);

为什么不将这些值拆分为逗号分隔的字符串,并使用IN而不是=

string allTuperValues = string.Join(",", parameterValueMappings.Select(t => 
string.Format("{0}", t.Item2)));
string query = "SELECT *  FROM dbo.Mytable WHERE IdValue IN(" + allTuperValues 
+ ")";

中断ReadSqlTableToDataTable并检查您的查询-我认为它没有读取您认为它是如何执行的,当您将“+”运算符与
string
List
联机
new SqlCommand(query+parameterValueMappings,conn)一起使用时,您期望得到的结果?@Fabio我希望它是一个整数值,以完成我传入的SQL语句。由于我的SQL查询是不完整的,不是最佳的方法,建议也不好,所以应该始终使用
SqlParameter
。防止sql注入并更有效地执行查询(通过重用已编译的查询计划)
string query = "SELECT *  FROM dbo.Mytable WHERE IdValue = @IDValue;";

SqlCommand command = new SqlCommand(query , conn);
command.Parameters.Add("@IDValue", SqlDbType.Int);
string allTuperValues = string.Join(",", parameterValueMappings.Select(t => 
string.Format("{0}", t.Item2)));
string query = "SELECT *  FROM dbo.Mytable WHERE IdValue IN(" + allTuperValues 
+ ")";