在 ADO.NET 中使用 ODBC 调用预定义的 Access 查询
Calling a pre-defined Access query using ODBC in ADO.NET
我正在使用 C# 和 OdbcConnection
连接到 Access 数据库。在数据库中有一个我想要 运行 的预定义查询(就像 Sql 服务器中的存储过程)。这对于旧的基于 COM 的 ADO 来说非常容易,但它似乎在 ADO.net
中不起作用
OdbcConnection conn = AccessConnect.Connect();
var cmd = conn.CreateCommand();
cmd.CommandText = @"MyAccessQuery;";
cmd.CommandType = CommandType.StoredProcedure;
var da = new OdbcDataAdapter(cmd);
var ds = new DataSet();
da.Fill(ds);
是否有解决方法,或者我是否必须在 C# 代码中复制我的 Access 查询?
Access ODBC(和 OLEDB)接口将 Access 中保存的查询公开为视图或存储过程。它们的公开方式决定了它们可以被外部应用程序使用的方式。
在 Access 中 不 使用参数的已保存 SELECT 查询公开为视图,因此它们可以像 table 一样使用,例如
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);
}
}
Access 中其他类型的已保存查询公开为存储过程,因此需要使用 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 连接工作。
我正在使用 C# 和 OdbcConnection
连接到 Access 数据库。在数据库中有一个我想要 运行 的预定义查询(就像 Sql 服务器中的存储过程)。这对于旧的基于 COM 的 ADO 来说非常容易,但它似乎在 ADO.net
OdbcConnection conn = AccessConnect.Connect();
var cmd = conn.CreateCommand();
cmd.CommandText = @"MyAccessQuery;";
cmd.CommandType = CommandType.StoredProcedure;
var da = new OdbcDataAdapter(cmd);
var ds = new DataSet();
da.Fill(ds);
是否有解决方法,或者我是否必须在 C# 代码中复制我的 Access 查询?
Access ODBC(和 OLEDB)接口将 Access 中保存的查询公开为视图或存储过程。它们的公开方式决定了它们可以被外部应用程序使用的方式。
在 Access 中 不 使用参数的已保存 SELECT 查询公开为视图,因此它们可以像 table 一样使用,例如
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);
}
}
Access 中其他类型的已保存查询公开为存储过程,因此需要使用 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 连接工作。