0

これは奇妙な質問です、そして私はそれを正しく組み立てたことを望みます。Visual Studio DataSetデザイナーを使用して、プロジェクトをSQLサーバーにリンクするSQLテーブルアダプターを作成しています。接続文字列はODBCエントリを介して行われます。

すべてのテーブルには、更新や挿入などのデフォルトのクエリがあります。dataset.Designer.csファイルでは、これらのコマンドは自動生成されます。これが1つの例です:

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] = ?))";

これがデータベース名にどのように依存するか、およびデータベース名を変更した場合にどのように望ましくないかを確認できます。これで、1つを除くすべてのテーブルでデータベース名が指定されます。そうでない1つのテーブルには、次のような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] = ?)))";

最後の1つは、データベース名に依存しないため、理想的には必要なものです。これが、私が最初にODBCを使用した理由ですが、明らかに私は何か正しいことをしていません。

私の質問は、これらすべてのエントリがデータベース名に依存しないようにするにはどうすればよいですか?

4

1 に答える 1

1

残念ながら、DataSet デザイナーでデザイナー/クエリ ビルダーを使用する場合、データベース名またはコンテキストが SQL オブジェクト名の前に追加されるのを防ぐことはできません。

各クエリのウィザードを使用して手動で削除できます。問題のクエリを右クリックし、[構成...] を選択します。開いたウィザードで、[pfttestbench] およびその他の前に追加されたデータ ([dbo] など) を、クエリ ビルダーを使用せずに削除します (クエリ ビルダーは、終了時にすぐに追加されます)。コンテキスト情報を削除したら、終了ボタンを押します。

これが機能したことを確認するには、*.Designer.cs ファイルを強制的に再作成する必要があります。そうしないと、変更が表示されません。これを行うには、ソリューション エクスプローラーで .xsd ファイルを右クリックし、[カスタム ツールの実行] を選択します。それが完了したら、最初に行ったように *.Designer.cs ファイルを開くか、変更したクエリの CommandText プロパティを表示して、完全修飾名のコンテキストが削除されたことを確認します。

于 2015-03-10T18:18:40.710 に答える