C# 使用c中的数据集从动态查询中获取数据#

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":

我有几天要处理一个动态查询,它不会将数据显示在报告中。我所做的是编写一段代码,帮助我使用从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); }
然后,我的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()
但情况也是如此。但我想现在我离解决方案有点近了。。。