C# 使用c中的数据集从动态查询中获取数据#
我有几天要处理一个动态查询,它不会将数据显示在报告中。我所做的是编写一段代码,帮助我使用从windows窗体获取的参数构建动态查询。例如,这是我用来获取表格的代码的一部分:C# 使用c中的数据集从动态查询中获取数据#,c#,sql-server,linq,dataset,C#,Sql Server,Linq,Dataset,我有几天要处理一个动态查询,它不会将数据显示在报告中。我所做的是编写一段代码,帮助我使用从windows窗体获取的参数构建动态查询。例如,这是我用来获取表格的代码的一部分: DataTable result = new DataTable(); String sqlQuery = "SELECT"; String myTable = getInfoReport(); SqlCommand myCommand; switch (myTable) { case "tbProducts":
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); }
然后,我的DataSet类中有下一个代码:
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#有点陌生,很长一段时间以来我一直在努力寻找解决方案,但我一直在努力检查与我类似的其他问题
提前感谢您的帮助 我发现了问题所在:它必须与我发送到查询的参数值有关。有时是好的,但有时不是,所以我必须关注他们。当我使用类型
tbproductsdatable
时,我还发现了一些东西。我把它改成了一个简单的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;
}
}
您应该尝试一下
EntityFramework
而不是编写“动态SQL查询”-我听说过,也读过,但应用程序的一半已经完成了,所以我所做的是添加数据集作为与数据库连接的解决方案。可能重复:我尝试了Adapter.Fill()
但情况也是如此。但我想现在我离解决方案有点近了。。。