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