問題タブ [rowstate]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
1120 参照

c# - DataTable の DataRow 状態に関する問題

DataTable を使用する非常に奇妙な要件があります。いくつかの列を持つデータテーブルがあります。データテーブル内の DataRow のいずれかに変更があった場合は常に Nwo。その後、DataRow の状態は変更済みに設定されます。それは大丈夫です。しかし、1 つの例外的な列については、この動作は望ましくありません。この特定の列の行を変更しても、データ行の状態が変更されないようにしたいと考えています。この問題を解決するために私を助けてください。

0 投票する
2 に答える
3356 参照

.net - データ ソースで削除された行に対する DataAdapter.Fill() の動作

DataSet//アーキテクチャを使用してDataTableDataAdapterデータベースとモデル オブジェクトの間を仲介しています。これらは独自のバッキングを持っています (DataRow によってバッキングされていません)。、、および がありDataAdapterます。これらの条件下でのモデルの私の理解は次のとおりです。AcceptChangesDuringFill = FalseAcceptChangesDuringUpdate = FalseFillLoadOption = OverwriteChangesDataAdapter

DataAdapter.Update()

  • DataRowState.AddedInsertCommand発砲につながります
  • DataRowState.ModifiedUpdateCommand発砲につながります
  • DataRowState.DeletedDeleteCommand発砲につながります

DataAdapter.Fill()

  • 主キーが の既存の行に対応する返された結果セットの行は、その行の更新に使用され、返された行が現在の行と同一であってもDataTableその行の状態は常に になります。DataRowState.Modified
  • 主キーが既存の行に対応しない、返された結果セット内の行は、新しい行の作成に使用され、その行の状態は次のようになります。DataRowState.Added
  • DataTable返された結果セットの行に対応しない行はそのまま残ります。DataRowState.Unchanged

このメンタル モデルで私が正しいとすればFill()、データ ソース内の削除された行を通知するために を使用するとします。また、 のパラメータがSelectCommandテーブル全体を返さないとします。次の 2 つのオプションがあると思います。

  • Fill()によって更新されるべきであるが、まだ更新されているすべての行を見つけますDataRowState.Unchanged(上記のテストされていないイタリック体の仮定に依存しています)。これらの行はデータ ソースで削除されています。
  • ;のDataTable前の関連行をすべてクリアします。Fill()再び表示されない行は、データ ソースで削除されています。これにより、最初の方法で保持されている とDataRowState.Addedの区別が失われます。DataRowState.Modified

だから、私の質問:

  • 上記のモデルは、DataAdapter上部に記載したプロパティ値の対象となりますか?
  • 削除された行を見つけるには、どのオプションを使用すればよいですか? 私は最初のものを好みますが、それはDataRowState.Modified、行が同一であっても、返されるすべての行がに設定されるという私の仮定に依存しています。それは安全な仮定ですか?
  • 私はこれについてすべて間違っていますか?
0 投票する
2 に答える
1410 参照

ado.net - ADO.NETデータセットでDataRowStateを維持する-RejectChanges()メソッドが機能しませんか?

問題は単純化されました:

いくつかのデータテーブルを含むDataSetがあります...データテーブルの1つにバインドされたWinformsDataGridがあります。ユーザーは、DataGridを介して、いくつかの行を上記のデータテーブルに貼り付けます。たとえば、3行とします。

これで、3つの行すべてにRowState=DataRowState.Addedがあります。

ここで、sqlserverトランザクションを開始します。

次に、dataAdapter1.Update(dataSet1)を呼び出して、行をSqlServerに更新します。行1..OK行2..OK行3..sqlserverレベルでのエラー(設計上、一意のインデックスを適用しました)

このエラーを検出したら、sqlserverトランザクションをロールバックします。

また、Dataset1.RejectChanges()および/またはDatatable1.RejectChanges()のいずれかを使用して、データテーブル/データセットの変更を「ロールバック」しようとします。

問題は、.RejectChanges()が私が想定したように機能することではありません。私のデータテーブルには2つの行(row1、row2)があり、そのRowState = DataRowState.Unchanged; row3は完全に消えました。

私がしたいのは、sqlserverトランザクションをロールバックするときに、dataAdapter1.Update()メソッドを呼び出す直前にデータテーブルの3行すべてが同じ状態のままになることです。

(理由は、ユーザーがバインドされたDataGridのエラーを確認し、修正アクションを実行して、更新を再試行できるようにするためです)。

誰かアイデアはありますか?つまり、ADOdataTableレベルで状態をロールバックするのと同等のものを探しています。

0 投票する
2 に答える
1540 参照

wcf - DataContractSerializerを使用してDataSetをシリアル化するときにDataRowStateを保持する

さまざまな理由で、型指定されたデータセットをWCFサービスエンドポイントに送信する必要があります。これは、逆シリアル化時に、クライアントに何があったかに関係なく、各DataTableの各行のRowStateが「追加」に設定されることを除いて正常に機能します。シリアル化されたストリームをファイルに書き出すと、RowStateがシリアル化されたデータの一部ではないことがわかります。これを追加して、サービスの境界を越えてRowStateを保持できるようにするにはどうすればよいですか?重要だとは思いませんが、サービスプロセスが.net 4.0を実行している間、クライアントプロセスは.net3.5を実行しています。

0 投票する
1 に答える
145 参照

delete-row - 追加された DataRow は、table.Rows[i].Delete()? を実行して削除されませんか?

何故ですか?データ行の状態が追加されます。行を削除しても、状態は変わりません。なぜ削除しないのですか?これが、Delete Store Procedure が呼び出されない理由です。

編集: データ行が新たに追加された後、削除しようとしました。

0 投票する
2 に答える
4022 参照

asp.net - GridViewRowが選択されている場合...それ以外の場合

わかりました。これは非常に簡単なことのようですが、エラーが発生しないと作業できないようです。行が選択されているかどうかを示すIfThenステートメントがあり、それ以外の場合はメッセージを表示します。行を選択するとコードは正常に実行されますが、行を選択せず​​に続行しようとすると、表示したいメッセージの代わりにエラーが発生します。これが私がやろうとしていることの例です:

誰かがこれで私を助けることができますか?

0 投票する
8 に答える
39272 参照

c# - データテーブルからすべての行を削除する方法

rowstate プロパティ値が Deleted のデータテーブルからすべての行を削除したい。

現在、すべての行を繰り返し処理し、各行を削除しています。

効率的な方法はありますか?SQL Server で削除したくない DataTable メソッドを使用したい。


0 投票する
0 に答える
107 参照

.net-4.0 - データ アダプターを使用する場合、更新 CASCADE 発行で使用される出力パラメーター

いくつかのデータ アダプターを手動で作成しました。バージョンの非互換性のため、自動生成されたものを使用することはできません。通常、PK と FK の制約が混在している多数のテーブルで構成されるデータセットの場合です。これまでのところ、そのほとんどは非常にスムーズに機能していますが、新しい「追加された」行で DB を更新するときに、(データセット内の行に割り当てられた一時的なものではなく) PK に DB シーケンスを使用するようにアダプターを変更した後、私は打撃の問題。

シーケンスを挿入ステートメントに追加し、PK パラメーターを出力パラメーターに変更して、データセット行を更新し、すべての子行も更新するようにしました (UPDATE CASCADE ルールを使用)。問題は、更新前に行の状態が追加されていた子行が、変更された状態に変更されることです (これが起こっていることに同意しません。追加された行は、たとえそれが変更されました!)。したがって、子テーブルを子行で更新しようとすると、追加された状態の行が期待されるため失敗します。

この問題を回避できる最もクリーンな方法は何ですか? 私が考えることができる潜在的な解決策:

  • UPDATE CASCADE をオフにし、各子行を手動で更新した後、親 PK を更新し、各行を変更した後に追加済みに戻します。
  • 更新を開始する前に、データセットのすべてのテーブルに追加されたすべての行のコピーを作成し、各テーブルの更新後にメイン コピーを更新して、すべての正しい行を追加済みに戻します。

より良いアイデアはありますか?

0 投票する
3 に答える
1576 参照

c# - CollectionViewSourceで行が新しいかどうかを確認します

ソースとしてDataTableを強く型付けしたCollectionViewSource(cvs)があります。Cvs.ViewはDataGridのItemsSourceとして設定されます。DataGridの変更に基づいて、データベースのデータを更新、挿入、および削除したい。更新は正常に完了し、削除することも考えていますが、挿入についてはいくつか問題があります。cvs.ViewのCurrentChangingイベントを処理してこれを実行しようとしましたが、行の状態は常に切り離されているため、追加する必要があります。これが私のコードです:

これは正しい方法ですか?私は何かが足りないのですか?前もって感謝します。

編集:DataGridバインディング:

0 投票する
3 に答える
46830 参照

c# - C#-DataAdapterを使用してDataTableからSQLテーブルを更新する-SQLテーブルが更新されない

select * fromはExcelスプレッドシートをにDataTable dt。それらの値を取得してSQLテーブルを更新したいと思います。SQLテーブルは、元のExcelスプレッドシートからSQLに手動でインポートするために存在し、主キーが設定されています。ユーザーがExcelシートを更新し、SQL値を更新する必要があります。dt.RowState更新を呼び出すために、を変更に設定しています。エラーは発生しませんが、SQLテーブルが更新されません。前のテストでは、SQLのアクセス許可と接続が良好であることが示されています。テーブルを変更できます。