2009-02-27 121 views
0

我是.net c#業務的總新手,最近在這裏創建一個表單應用程序來混洗SSIS配置中的數據。 MS的天才們決定不把密鑰應用到我正在使用的表格中,並且由於它們的組合長度太長而生成兩個候選字段的組合密鑰將不起作用。我不特別想通過添加自動增量字段來混淆[ssis配置]表模式。TableAdapter - 無需密鑰更新

所以我一直有很多麻煩從DataGridView控件更新與TableAdapter一起使用。

我需要更新語句是更新表設置a = x其中b = y和c = z。

我可以設置TableAdapter的更新方法,如果是的話,如何設置。如果不是,該怎麼辦?

我看到這個自動生成的代碼:

this._adapter.InsertCommand = new global::System.Data.SqlClient.SqlCommand(); 
      this._adapter.InsertCommand.Connection = this.Connection; 
      this._adapter.InsertCommand.CommandText = "INSERT INTO [dbo].[SSIS Configurations Staging] ([ConfigurationFilter], [Configur" + 
       "edValue], [PackagePath], [ConfiguredValueType]) VALUES (@ConfigurationFilter, @C" + 
       "onfiguredValue, @PackagePath, @ConfiguredValueType)"; 

但在我的表單代碼,該更新命令不可用。我假設這是因爲上面的代碼是一個類定義,我不能在創建對象後更改。我看到這個代碼有一個建議不會被改變,因爲它是由VS自動生成的。

感謝您的最優秀的建議。

回答

2

從你的代碼我假設你正在使用一個類型化的數據集與設計師。

沒有主鍵是設計者不會生成插入,更新或刪除命令的衆多原因之一。這是CommandBuilder的限制。

您可以使用屬性窗口向Apdapter添加更新命令,但如果您以後再次配置主查詢,它會愉快地丟棄所有工作。在修改任何* .Designer.cs文件中的代碼時,都會出現同樣的理由。

取而代之,用Adaptername雙擊標題。設計人員將創建(如有必要)隨附的非設計器源文件,並將部分類的外部放入其中。不幸的是,這是設計師的代碼生成在C#中的多遠,你必須從這裏開始。 (另外:VB設計師知道一些更多的技巧)。

編輯:

您必須提供自己的更新(...)方法,並建立一個UpdateCommand等

var updateCommand = new SqlCommand(); 
    ... 
+0

它也沒有產生一個複合鍵的UPDATE語句 - 是這是預期的?我將數據類型從nvarchar更改爲varchar,並減少了總字節數。 – Sam 2009-02-27 17:28:13