我正在使用数据适配器从访问数据库中提取数据(请参阅下面的代码)。当我在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);
}`
答案 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);