0

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

我过去曾多次使用此过程,它仍然适用于这些呼叫。

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

`
public void GetQueries(ref DataTable tSQL, String tool, string Filter, OleDbConnection lConn) { OleDbDataAdapter dadapt = new OleDbDataAdapter(); //访问字符串的数据适配器 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);

    }`
4

1 回答 1

0

您确定您在 WHERE 子句中定义的过滤器将在某些行上评估为 true 吗?

为什么不使用参数而不是字符串连接?您确定这Active = True将评估为 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);
于 2011-02-01T18:58:19.007 回答