2013-01-08 29 views
0

這是一個奇怪的問題,我希望我能正確構建它。我正在使用Visual Studio DataSet設計器來創建SQL表適配器,以將我的項目鏈接到SQL服務器。連接字符串是通過ODBC條目。DataSet Designer爲不同的表創建不同的CommandText

所有表都有默認查詢,如更新和插入。在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開始,但顯然我沒有做正確的事情。

我的問題是,我如何確保所有這些條目將獨立於數據庫名稱?

+0

你是什麼意思確保數據庫名稱是獨立的,基於你發佈的內容,沒有辦法可以在[TestData_Instrument]例如vs [[pftestbench] dbo]。[TestData_TestGroupInstrument]指向兩個不同的表格。你目前是否有任何錯誤或問題..? – MethodMan

+0

對不起,讓我澄清。 [TestData_TestGroupInstrument]和[TestData_Instrument]都是[pftestbench]數據庫中的表格。所以基本上,我不想[pftestbench]出現,就像[TestData_Instrument]的情況一樣。 – sbenderli

回答

1

不幸的是,在DataSet設計器中使用設計器/查詢構建器時,無法防止數據庫名稱或上下文被預先添加到SQL對象名稱中。

您可以通過嚮導爲每個查詢手動刪除它們。右鍵單擊有問題的查詢,然後選擇「配置...」。在打開的嚮導中,刪除[pfttestbench]和任何其他前置數據(如[dbo]),而無需使用查詢生成器(在您退出時將會立即添加它們)。 刪除上下文信息,點擊完成按鈕。

要確認這是否奏效,您需要強制* .Designer.cs文件重新創建,否則您將看不到更改。爲此,請右鍵單擊解決方案資源管理器中的.xsd文件,然後選擇「運行自定義工具」。一旦完成,您可以像最初一樣打開* .Designer.cs文件,或者查看您修改的查詢的CommandText屬性,以確認已刪除完全限定的名稱上下文。