使用c#中的数据集从动态查询中获取数据
本文关键字:查询 获取 动态 数据 数据集 使用 | 更新日期: 2023-09-27 18:15:14
我有几天的动态查询,没有给我的数据显示在报告中。我所做的是编写一个代码,该代码可以帮助我使用从windows窗体获得的参数构建动态查询。例如,这是我用来获取表的代码的一部分:
DataTable result = new DataTable();
String sqlQuery = "SELECT";
String myTable = getInfoReport();
SqlCommand myCommand;
switch (myTable)
{
case "tbProducts":
sqlQuery += String.Format(" DateTime AS [{0}]", _DBFields.Date);
sqlQuery += String.Format(",ProductID AS [{0}]", _DBFields.MatNr);
sqlQuery += String.Format(",Material AS [{0}]", _DBFields.Material);
break;
case "tbErrors":
sqlQuery += String.Format(" DateTime AS [{0}]", _DBFields.Date);
sqlQuery += String.Format(",Message AS [{0}]", _DBFields.Message);
break;
}
sqlQuery += " FROM dbo." + myTable;
sqlQuery += " WHERE (DateTime between @StartDate and @EndDate)";
sqlQuery += " ORDER BY DateTime";
myCommand = new SqlCommand(sqlQuery);
myCommand.CommandType = CommandType.Text;
myCommand.Parameters.AddWithValue("@StartDate", myReportData.StartDate);
myCommand.Parameters.AddWithValue("@EndDate", myReportData.EndDate);
if (myTable.Equals("tbErrors")) { result = myErrorsAdapter.fillErrorsDataTable(myCommand); }
else { result = myProductsAdapter.fillProductsDataTable(myCommand); }
然后我有下一个代码在我的数据集类:
partial class tbProductsTableAdapter
{
internal DataTable fillProductsDataTable(SqlCommand myCommand)
{
MyDataSet.tbProductsDataTable result = new MyDataSet.tbProductsDataTable();
try
{
this.Connection.Open();
myCommand.Connection = this.Connection;
this.Adapter.SelectCommand = myCommand;
result.Load(this.Adapter.SelectCommand.ExecuteReader());
this.Connection.Close();
}
catch (Exception e)
{
}
return result;
}
}
我的问题是,当我试图加载我在开始时声明的DataTable中的数据时,适配器不执行查询,也不给我带来我想要显示的数据。我对c#有点陌生,我试图找到一个解决方案很长一段时间,但我被卡住了,试图检查其他类似的问题。
提前感谢您的帮助!
我发现发生了什么:它必须与我发送给我的查询参数的值。有时是好的,但有时不是,所以我必须密切关注他们。当我使用类型tbProductsDataTable
时,我还发现了一些东西。我把它改成了一个简单的DataTable
类型,也可以完美地工作。所以第二个过程的代码是:
partial class tbProductsTableAdapter
{
internal DataTable fillProductsDataTable(SqlCommand myCommand)
{
DataTable result = new DataTable();
try
{
this.Connection.Open();
myCommand.Connection = this.Connection;
this.Adapter.SelectCommand = myCommand;
this.Adapter.fill(result);
this.Connection.Close();
}
catch (Exception e)
{
}
return result;
}
}