在C#OleDbDataAdapter.fill方法中没有给出任何数据或错误

时间:2011-02-01 18:53:06

标签: c# oledbdataadapter

我正在使用数据适配器从访问数据库中提取数据(请参阅下面的代码)。当我在Access数据库中运行SQL时,我得到了预期的数据。但是,当我单步执行代码时,fill方法只生成表定义但不生成行。

我过去曾经多次使用过这个程序,它仍适用于这些调用。

访问中的SQL再次返回正确的数据,在C#中我没有收到任何错误消息,但我也没有得到数据。以前有人见过这个吗?

`
           public void GetQueries(ref DataTable tSQL,String tool,string Filter,OleDbConnection lConn)         {             OleDbDataAdapter dadapt = new OleDbDataAdapter(); //用于Access的数据适配器             String lSQL =“”;

        //assign the connection to the processing mdb
        //lAccProcSQL.Connection = lConn;

        //Pull the queries to be executed
        lSQL = "SELECT * FROM tblSQL WHERE Active = TRUE AND ToolCode = '" +
            tool + "' and type not in (" + Filter + ") ORDER BY QueryNum";

        //Set the adapter to point to the tblSQL table
        dadapt = new OleDbDataAdapter(lSQL, lConn);

        //clear tables in case of rerun
        tSQL.Clear();

        //Fill working queries data table
        dadapt.Fill(tSQL);

    }`

1 个答案:

答案 0 :(得分:0)

您确定在WHERE子句中定义的过滤器在某些行上的计算结果为true吗?

为什么不使用参数而不是字符串连接?您确定Active = True会评估为真吗?据我所知,True在Access中用-1表示。

那么,你为什么不这样试试呢:

var command = new OleDbCommand();
command.Connection = lConn;
command.CommandText = "SELECT * FROM tblSql WHERE Active = -1 AND ToolCode = @p_toolCode AND type NOT IN (" + filter + ") ORDER BY querynum";
command.Parameters.Add ("@p_toolCode", OleDbType.String).Value = tool;
datapt = new OleDbDataAdapter();
datapt.SelectCommand = command;
dadapt.Fill (tSql);