DataSet Designer создает разные CommandText для разных таблиц

Это странный вопрос, и я надеюсь, что правильно его сформулировал. Я использую конструктор Visual Studio DataSet для создания адаптеров таблиц 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 для начала, но, очевидно, я не делаю что-то правильно.

У меня вопрос, как я могу гарантировать, что все эти записи будут независимыми от имени базы данных?

1 ответ

К сожалению, когда вы используете конструктор / конструктор запросов в DataSet Designer, вы не можете предотвратить добавление имени базы данных или контекста к именам объектов SQL.

Вы можете вручную удалить их через мастер для каждого запроса. Щелкните правой кнопкой мыши на вопрос и выберите "Настроить...". В открывшемся мастере удалите [pfttestbench] и любые другие предварительно добавленные данные (например, [dbo]) БЕЗ использования Query Builder (который добавит их сразу после выхода.) После удаления информации о контексте, нажмите кнопку финиша.

Чтобы убедиться, что это сработало, вам нужно принудительно создать файл *.Designer.cs, иначе вы не увидите изменения. Для этого щелкните правой кнопкой мыши файл.xsd в обозревателе решений и выберите "Запустить пользовательский инструмент". Как только это будет сделано, вы можете либо открыть файл *.Designer.cs, как вы это делали изначально, либо просмотреть свойства CommandText запросов, которые вы изменили, чтобы убедиться, что полностью определенный контекст имени был удален.

Другие вопросы по тегам