2009-11-30 48 views
0

我试图在ADO.Net中构建强类型数据集,并且在TableAdapter的一个方面遇到了一些问题。在强类型ADO.NET TableAdapter中参数化模式

我的查询看起来像

SELECT * 
FROM testdict.ModuleVariable 
WHERE Module = ? 

我的问题围绕testdict部分旋转。我们使用几种不同的模式访问我们的数据(由于复用的Sybase IQ实例)。我如何参数化此查询的模式部分?

我已经试过:

SELECT * 
FROM ?.ModuleVariable 
WHERE Module = ? 

,但无济于事。我目前的想法是,我可能不得不继承TableAdapter并手动参数化模式,但我希望有一个更好的解决方案!

在此先感谢

回答

1

首先你将不能够通过简单地增加一个选择查询在设计时做到这一点的。您不能参数化模式。

但是有一个解决方案this.Here你如何能做到这一点。

1)拖动和表放到你的类型化数据集设计,这将为表创建一个类型化的数据表表适配器来访问数据库表。表适配器知道数据表的模式。

2)现在在你的数据库需要两个参数创建一个存储过程。一个是表 [?.ModuleVariable]的模式,其他将是您的其中子句或者您可能希望作为条件的任何其他。您可以根据需要创建超载。这个存储过程将根据参数构造sql查询并在数据库上执行它。这将返回结果集到呼叫表适配器

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

4.)现在从代码中,您可以创建表格适配器的实例,并调用方法,该方法又会调用您的存储过程,然后返回给您带有结果的数据表格。

玩得开心!

1

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

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

分部类(表名)的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 

端功能 末级

亲切的问候, 卡洛斯马伦