2009-02-27 18 views
0

私は、.net c#ビジネスの初心者で、この先週、SSIS構成のためにデータをシャッフルするためのフォームアプリケーションを作成しました。 MSの天才は、私が作業しているテーブルにキーを適用しないことに決めました。そして、2つの候補フィールドの複合キーを生成することは、長さが長すぎるために機能しません。オートインクリメントフィールドを追加することで、特に[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)"; 

をしかし、私のフォームコードで、UpdateCommandのは利用できません。上記のコードは、オブジェクトを作成した後でも変更できないクラス定義なので、これが前提です。私はこのコードがVSによって自動生成されているので、変更しないことを推奨していることがわかります。

最も優れたアドバイスをいただきありがとうございます。

答えて

2

あなたのコードから、私はデザイナで型付きのデータセットを使用していると仮定します。

主キーを持たないことは、設計者が挿入、更新、または削除コマンドを生成しない多くの理由の1つです。これはCommandBuilderの制限です。

プロパティウィンドウを使用してApdapterに更新コマンドを追加することはできますが、後でメインクエリを再構成すると、すべての作業を捨ててしまいます。 * .Designer.csファイル内のコードを変更することについても同じ引数があります。

代わりに、Adapternameでキャプションをダブルクリックします。デザイナーは、必要に応じて付随するデザイナー以外のソースファイルを作成し、その中に部分クラスの外部を配置します。残念ながら、デザイナーのコード生成がC#でどのくらい進んでいるかは、そこから取り除かなければならないでしょう。 (別名:VBデザイナーはもう少し巧妙なことを知っています)。

編集:

あなたがあなた自身のアップデートを提供する必要があります(...)メソッドとセットアップにUpdateCommandなど

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

また、複合キーでUPDATEステートメントを生成しませんでした - ですこれは期待?データ型をnvarcharからvarcharに変更し、合計バイト数を減らしました。 – Sam

+0

複合キーはわかりませんが、varchar/nvarcharとlengthは関係ありません。 –

関連する問題