这是一个奇怪的问题,我希望我的框架是正确的。我正在使用 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 的原因,但显然我做的不对。
我的问题是,如何确保所有这些条目都与数据库名称无关?