0

这是一个奇怪的问题,我希望我的框架是正确的。我正在使用 Visual Studio 数据集设计器创建 SQL 表适配器,以将我的项目链接到 SQL 服务器。连接字符串是通过 ODBC 条目。

所有表都有默认查询,例如更新和插入。在 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 的原因,但显然我做的不对。

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

4

1 回答 1

1

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

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

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

于 2015-03-10T18:18:40.710 回答