【问题标题】:Parameterize the schema in a strongly-typed ADO.NET TableAdapter在强类型 ADO.NET TableAdapter 中参数化架构
【发布时间】:2010-12-21 16:49:47
【问题描述】:

我正在尝试在 ADO.Net 中构建强类型数据集,但在 TableAdapters 的一个方面遇到了一些问题。

我的查询看起来像

SELECT *
FROM testdict.ModuleVariable
WHERE Module = ?

我的问题围绕着 testdict 部分。我们使用几种不同的模式来访问我们的数据(因为多路复用的 Sybase IQ 实例)。如何参数化此查询的架构部分?

我试过了:

SELECT *
FROM ?.ModuleVariable
WHERE Module = ?

但无济于事。我目前的心态是我可能必须继承 TableAdapter 并手动参数化架构,但我希望有更好的解决方案!

提前致谢

【问题讨论】:

    标签: ado.net dataset strongly-typed-dataset tableadapter


    【解决方案1】:

    首先,您无法在设计时通过简单地添加选择查询来实现这一点。您不能对架构进行参数化。

    但是有一个解决方案。您可以这样做。

    1.) 将表拖放到您的类型化数据集设计器中,该设计器将为该表创建类型化数据表用于访问数据库表的表适配器强>。表适配器知道数据表的架构。

    2.) 现在在您的数据库中创建一个存储过程,它接受两个参数。一个是 表的模式 [?.ModuleVariable],另一个是您的 where 子句 或者您可能想要的任何标准。您可以根据需要创建此重载。然后,这个存储过程将根据参数构造 sql 查询并在数据库上执行它。这将将结果集返回给调用 table-adapter

    3.) 从设计视图中向表格适配器添加一个方法,该方法将从存储过程中获取结果。 确保结果的架构完全符合相关数据表的架构

    4.) 现在,您可以从代码中创建表适配器的实例并调用该方法,该方法将调用您的存储过程并返回您填写的数据表.

    玩得开心!

    【讨论】:

      【解决方案2】:

      您可以重载或向表适配器添加新函数,因为它们被定义为部分类。这个新函数将模式名称作为参数。例如,Fill(table As (tableName), schemaName As String)。这是我的做法:

      1. 创建一个新文件并将其命名为 (dataSetName).(whatever_you_like).vb。
      2. 在顶部放置命名空间 (dataSetName)TableAdapters。
      3. 使用 Import 语句轻松访问数据集中的表。导入 (solutionName).(dataSetName)。
      4. 定义新函数。这个示例函数有点简化,但我想这足以让你明白了。

      部分类 (tableName)TableAdapter 公共重载函数填充(_ 表作为(表名),_ schemaName 作为字符串)作为整数

      Dim args() As String = {schemaName, table.TableName}
      Dim selectCmdText As String = "SELECT * FROM {0}.{1}"
      selectCmdText = String.Format(selectCmdText, args)
      
      Connection.Open()
      Dim selectCmd As New MySqlCommand(selectCmdText, Connection)    
      Dim adapter As New MySqlDataAdapter(selectCmd)
      
      Dim returnValue As Integer = 0
      returnValue = adapter.Fill(table)
      
      Connection.Close()
      
      Return returnValue
      

      结束函数 结束类

      亲切的问候, 卡洛斯·马伦

      【讨论】:

        猜你喜欢
        • 2018-03-04
        • 1970-01-01
        • 1970-01-01
        • 2013-01-15
        • 1970-01-01
        • 2015-05-09
        • 2011-03-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多