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

时间:2013-05-24 11:13:48

标签: c# sql-server linq dataset

我有几天的动态查询没有让我在报告中显示数据。我所做的是创建一个代码,帮助我使用从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#有点新意,我试图找到一个解决方案很长一段时间,但我试图检查与我类似的其他问题。

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

我发现了正在发生的事情:它必须与我发送到查询的参数值一致。有时好,但有时不好,所以我必须留意它们。当我使用类型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;
    }
}
相关问题