【问题标题】:Created Parameterized query not showing in datasource visual studio 10 and access创建的参数化查询未在数据源 Visual Studio 10 中显示并访问
【发布时间】:2015-03-11 01:09:51
【问题描述】:

我正在尝试复制 northwind 数据库,但是当我创建参数查询 vw_CustomerOrderYear 时,查询未显示在我的数据源中。
我不知道我错过了什么..

我的参数查询vw_CustomerOrderYear是:

PARAMETERS OrderYear Long;

SELECT DISTINCT Customer.ID, Customer.Name, Customer.City, Customer.Country,
Year([Order].OrderDate) AS OrderYear
FROM Customer INNER JOIN [Order] ON Customer.ID=Order.CustomerId
WHERE (((Year(Order.OrderDate))=[OrderYear])) Or ((([OrderYear]) Is Null));

如何在我的SomeNameDataSet 下获得此查询?

【问题讨论】:

  • 我所做的是在我的数据库中创建了与北风相同的参数查询。但它没有显示在我的数据源数据集中。
  • 你能让 any 查询显示为数据源吗?
  • yes.. 没有参数的查询显示在数据集中。我在 access 中创建了参数化查询。现在我正在尝试通过 visual studio 10 创建它。我在网上见过几个通过visual studio获取参数查询的例子

标签: winforms dataset ms-access-2007 datasource


【解决方案1】:

当您在 Microsoft Access 应用程序本身 (MSACCESS.EXE) 中创建“参数查询”时,即其 SQL 代码看起来像 ...

PARAMETERS ... ; SELECT ... FROM ...

...它被 ACE/Jet DAO(数据访问对象)视为“查询”,这是 MSACCESS 用于与 Access 数据库引擎(ACE 或 Jet)进行通信的技术。您可以在 Access 中运行查询并提示输入参数值,也可以在 VBA 中使用 DAO QueryDef 对象并将参数值传递给该 QueryDef 对象的 .Parameters 集合。

.NET 项目中的“数据集”数据源行为不同,因为它们使用 System.Data.OleDb,而 ACE/Jet OLEDB 提供程序不会将这些查询归类为“视图”。相反,它将它们归类为“[存储的]过程”。所以,如果你要打开一个 OleDbConnection 并做

DataTable dtViews = con.GetSchema("Views")

那么查询将不会显示在结果列表中。这就是为什么在 Visual Studio 的数据源向导的“视图”下看不到它的原因。

但是,如果你这样做,它确实会显示出来

DataTable dtProcedures = con.GetSchema("Procedures")

因此,您可以使用现有的 Access“参数查询”,将其视为 .NET 代码中的存储过程,例如,

using (var cmd = new OleDbCommand())
{
    cmd.Connection = con;  // an open OleDbConnection to the database
    cmd.CommandText = "vw_CustomerOrderYear";
    cmd.CommandType = CommandType.StoredProcedure;
    cmd.Parameters.Add("OrderYear", OleDbType.Integer).Value = 2014;
    using (OleDbDataReader rdr = cmd.ExecuteReader())
    {
        while (rdr.Read())
        {
            Console.WriteLine(rdr[0]);
        }
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-19
    • 1970-01-01
    • 1970-01-01
    • 2021-06-22
    • 2018-03-13
    • 1970-01-01
    相关资源
    最近更新 更多