DataSet Designer为不同的表创建不同的CommandText

时间:2013-01-08 21:51:21

标签: c# visual-studio-2010 odbc dataset-designer

这是一个奇怪的问题,我希望我能正确地构建它。我使用Visual Studio DataSet设计器来创建SQL表适配器以将我的项目链接到SQL服务器。连接字符串是通过ODBC条目。

所有表都有默认查询,例如update和insert。在dataset.Designer.cs文件中,这些命令是自动生成的。这是一个例子:

this._adapter.DeleteCommand = new global::System.Data.Odbc.OdbcCommand();
            this._adapter.DeleteCommand.Connection = this.Connection;
            this._adapter.DeleteCommand.CommandText = "DELETE FROM [pftestbench].[dbo].[TestData_TestGroupInstrument] WHERE (([TestGroup" +
                "RecordNumber] = ?) AND ([InstrumentSerial] = ?))";
            this._adapter.DeleteCommand.CommandType = global::System.Data.CommandType.Text;
            this._adapter.DeleteCommand.Parameters.Add(new global::System.Data.Odbc.OdbcParameter("Original_TestGroupRecordNumber", global::System.Data.Odbc.OdbcType.BigInt, 0, global::System.Data.ParameterDirection.Input, ((byte)(0)), ((byte)(0)), "TestGroupRecordNumber", global::System.Data.DataRowVersion.Original, false, null));
            this._adapter.DeleteCommand.Parameters.Add(new global::System.Data.Odbc.OdbcParameter("Original_InstrumentSerial", global::System.Data.Odbc.OdbcType.NVarChar, 0, global::System.Data.ParameterDirection.Input, ((byte)(0)), ((byte)(0)), "InstrumentSerial", global::System.Data.DataRowVersion.Original, false, null));

我对CommandText行感兴趣:

this._adapter.DeleteCommand.CommandText = "DELETE FROM [pftestbench].[dbo].[TestData_TestGroupInstrument] WHERE (([TestGroup" +
                "RecordNumber] = ?) AND ([InstrumentSerial] = ?))";

您可以看到这取决于数据库名称,以及在更改数据库名称时如何不受欢迎。现在,除了其中一个表之外的所有表都指定了数据库名称。没有的一个表有一个这样的CommandText行:

this._adapter.DeleteCommand.CommandText = @"DELETE FROM [TestData_Instrument] WHERE (([Serial] = ?) AND ((? = 1 AND [Model] IS NULL) OR ([Model] = ?)) AND ((? = 1 AND [CalibrationDue] IS NULL) OR ([CalibrationDue] = ?)) AND ((? = 1 AND [Trace] IS NULL) OR ([Trace] = ?)) AND ((? = 1 AND [Manufacturer] IS NULL) OR ([Manufacturer] = ?)))";

最后一个是理想情况下我想要的,因为它与数据库名称无关。这就是我开始使用ODBC的原因,但显然我没有做正确的事情。

我的问题是,如何确保所有这些条目都与数据库名称无关?

1 个答案:

答案 0 :(得分:1)

不幸的是,在DataSet Designer中使用设计器/查询构建器时,您无法阻止数据库名称或上下文被添加到SQL对象名称之前。

您可以通过向导为每个查询手动删除它们。右键单击相关查询,然后选择"配置..."。在打开的向导中,删除[pfttestbench]和任何其他前置数据(例如[dbo])而不使用查询生成器(退出时将重新添加它们)。 删除上下文信息后,点击“完成”按钮。

要确认这是否有效,您将要强制重新创建* .Designer.cs文件,否则您将看不到更改。为此,右键单击解决方案资源管理器中的.xsd文件,然后选择"运行自定义工具"。完成后,您可以像最初一样打开* .Designer.cs文件,或查看您修改的查询的CommandText属性以确认已删除完全限定名称上下文。