我正在扩展项目中的一个类,我需要将特定数据从 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;
}
然后我像这样使用它:
private readonly IDbRepository _repo;
private readonly DataTable _revisedDatabTable;
private List<Tuple<string, string>> _commandParameters;
private readonly int _batchId;
public FooClass(IDbRepository repository, DataTable revisedDatabTable, int batchId) //pass in structure
{
_repo = repository;
_revisedDatabTable = revisedDatabTable;
_batchId = batchId;
}
public void Execute()
{
_commandParameters = new List<Tuple<string, string>>
{
new Tuple<string, string>("@IDValue",_idValue.ToString() )
};
_repo.ReadSqlTableToDataTable(_commandParameters, _revisedDatabTable);
}
在最终这样调用类之前:
new FooClass(_repo, dtRevisedData, idValue).Execute();
idValue
是通过文件读入的,并被放入我的新 SQL 表中。
现在,当我运行它时,我什么也得不到。我的表中有数据,所以我知道这不是问题所在。我觉得问题在于我如何使用元组。我设置正确了吗?如果不是,我做错了什么?
最佳答案
您误用了 SqlCommand
。您不应连接字符串,而应将查询指定为字符串并使用 SqlCommand.Parameters
传递所有参数。
查看示例 here .
在你的情况下应该是这样的。没有元组,没有连接。
string query = "SELECT * FROM dbo.Mytable WHERE IdValue = @IDValue;";
SqlCommand command = new SqlCommand(query , conn);
command.Parameters.Add("@IDValue", SqlDbType.Int);
关于c# - 根据参数将SQL表中的数据拉取到DataTable中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46847498/