Access ODBC(和OLEDB)接口將Access中保存的查詢顯示爲Views或Stored Procedures。它們如何暴露決定了它們可以被外部應用程序使用的方式。
在Access中保存的SELECT查詢不使用使用參數公開爲Views,因此它們可以像表一樣使用,例如,
string sql = "SELECT * FROM mySavedSelectQuery WHERE id <= 3";
using (var cmd = new OdbcCommand(sql, con))
{
cmd.CommandType = System.Data.CommandType.Text;
using (var da = new OdbcDataAdapter(cmd))
{
var dt = new System.Data.DataTable();
da.Fill(dt);
Console.WriteLine("DataTable contains {0} row(s)", dt.Rows.Count);
}
}
其他類型的訪問保存的查詢公開爲存儲過程,所以需要使用ODBC {CALL ...}
語法被調用,像這樣:
string sql = "{CALL mySavedParameterQuery (?)}";
using (var cmd = new OdbcCommand(sql, con))
{
cmd.CommandType = System.Data.CommandType.StoredProcedure;
// set parameter values (if any) in the order that they appear
// in the PARAMETERS list of the saved query
cmd.Parameters.Add("?", OdbcType.Int).Value = 3;
using (var da = new OdbcDataAdapter(cmd))
{
var dt = new System.Data.DataTable();
da.Fill(dt);
Console.WriteLine("DataTable contains {0} row(s)", dt.Rows.Count);
}
}
注意,在兩者的在上述情況下,與從外部應用程序(C#,VB.NET,Java等)針對Access數據庫的任何查詢一樣,都有一些限制。例如,某些Access內置函數可能不可用,並且保存的調用用戶定義函數(用VBA編寫)的Access查詢將無法通過直接的ODBC或OLEDB連接工作。
'cmd.CommandText = @「select * from MyAccessQuery;」;「; cmd.CommandType = CommandType.Text;'不起作用? – rene
爲什麼你不能使用OleConnection和OleDataAdapter的任何原因? – rene
沒有兩個都給無效的sql錯誤 –