数据集设计器为不同的表创建不同的CommandText

本文关键字:创建 CommandText 数据集 集设计 数据 | 更新日期: 2023-09-27 17:50:59

这是一个奇怪的问题,我希望我正确地表达了它。我正在使用Visual Studio数据集设计器创建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的原因,但显然我做得不对。

我的问题是,我如何确保所有这些条目将是数据库名称独立的?

数据集设计器为不同的表创建不同的CommandText

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

您可以通过每个查询的向导手动删除它们。右键单击有问题的查询并选择"Configure…"。在打开的向导中,删除[pfttestbench]和任何其他预先添加的数据(例如[dbo]),而不使用查询生成器(当您退出时将它们添加回来)。删除上下文信息后,点击finish按钮。

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