問題タブ [dataadapter]

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 に答える
1560 参照

.net - UpdateBatchSize を設定する際の注意事項

多くの行 (10,000 以上) を持つ 2 つのデータ テーブルをマージする .NET アプリケーションがあります。DataAdapter.Update コマンドを使用すると、SQL テーブルに対して多数の更新/挿入を実行する可能性が高くなります。

現在、Adapter UpdateBatchSize プロパティを 200 に設定しています。VS は、この値を高く設定しすぎるとパフォーマンスが低下する可能性があるため警告します。わかりました。

パフォーマンスに関して、このプロパティを設定するときに何を探す必要がありますか? 何はともあれ、大量の行を更新するにはかなりの時間がかかります。私のマシン(またはDBサーバー)で実行するのにそれほど時間はかからないようですが、システムが他のアイテムを実行してロードされている場合、これは問題になる可能性があります。

プロファイラーで検索できるものはありますか? 標準的なプロファイリングを行うと、期間は通常 0 です。1 回または 2 回ヒットすることもあり (おそらく全体で 20 回)、約 20,000 回の更新のうち、3 ~ 4 回が 20 回ヒットします。CPU は、1 ~ 2 回ヒットしたカップルを除いて 0 です。 . 約 10 になる 2 つのレコードがあります。読み取りは常に 2 で、書き込みは常に 0 です。

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

sql - SqlDataAdapter.Fill() タイムアウト - 基になる Sproc がすぐに戻る

21 行のデータ (4 列) が取り込まれている SqlDataAdapter があります。それを駆動する sproc は、SQL Mgmt Studio では数秒で返されますが、.Fill() には 5 分かかります。

何か案は?

前もって感謝します!-クリス

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

c# - VS2005/VS2008 DataSet デザイナー、自動生成された GUID 列を持つテーブルに行を挿入します

VS2005/VS2008 DataSet デザイナーで作成された、厳密に型指定された DataTable があります。

テーブルには、SQL サーバーによって入力される GUID である主キー列があります。問題は、DataTable に行 (または複数の行) を追加してから、DataAdapter.Updateメソッドを呼び出す (DataTable を渡す) 場合です。DataAdapter.Updateが呼び出されると、主キー列に NULL を挿入できないという SQL 例外が発生します。

これが自動生成された列であり、新しい行に値を提供したくないことをデザイナーに伝えるにはどうすればよいですか? SQLによって生成された値が欲しいだけです。

ここに何か欠けているのでしょうか、それとも DataSet デザイナーの制限ですか?

LINQ to SQL を使用してこれを達成する方法は知っていますが、残念ながら、このプロジェクトでは自由に使用できません。

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

.net - SqlDataAdapter.Update が機能しない

私は SqlDataAdapter.Update(DataTable) を使用してデータベースにテーブルをスローしていますが、SqlDataAdapter は InsertCommand を無視して独自の書き込みを行い、必要に応じて主キーと null になる可能性のあるすべての行のみを送信します。どうすれば動作するようになりますか?

Update() を呼び出す前後にコードをステップ実行します。以前は、私の InsertCommand です。その後、それは SqlDataAdapter のものです。

編集: コード サンプルを投稿したくありません。なぜなら、私が持っている行を取得して、十分に簡単に機能する独自の SqlCommand オブジェクトを作成できるからです。Update が渡す InsertCommand が不十分であると判断した理由にもっと興味があります。これにより、自分のコードを掘り下げることができます。このすべてが時間の節約になるはずでした。

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

c# - SQLiteDataAdapter は、指定された DataTable を埋めません

GUI に GridView を設定できるように、SQLite データベースからデータを取得しようとしています。DataTable を返すコードは次のとおりです。

を呼び出した後、何らかの理由adapter.Fillで、DataTable にはまだ何も入力されていません。これまでのところ、コマンド テキストが正しいこと、および接続に正しい接続文字列が含まれていることを確認しました。両方とも、アプリケーションの他の部分でうまく使用されています。例外はスローされていないようです...他に問題を探すべき場所はありますか? API の使い方が間違っていませんか?

ありがとう!

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

.net - .NET データ アダプターのタイムアウト SP の問題

SQL Managerで直接正常に実行され、かなり大きな計算を実行しますが、実行に最大50〜10秒しかかからないSQL Serverストアドプロシージャがあります。

ただし、データ アダプターを介して .NET アプリからこれを呼び出すと、タイムアウトになります。ただし、タイムアウト期間が発生する前にタイムアウトが発生します。60 秒に設定しても、約 20 秒以内にタイムアウトします。

私は問題をグーグルで検索し、SPが直接機能するが、データアダプター呼び出しを介して遅いという問題に他の人が気付くのを見ました。

これを解決する方法についてのアイデアはありますか?

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

c# - これは DataTable API のバグですか? 変更が「間違った順序」で保存/実行される

編集: これが .NET のバグであるかどうかに関係なく、コメントをいただければ幸いです。

次のシナリオに単純化することができたバグがあります。

たとえば、他の行の間に行を挿入する場合、最初に後続の行の ID をインクリメントしてスペースを空けてから、行を挿入する必要があります。

また、行を削除する場合は、後続の行の ID をデクリメントして、テーブル内の行によって残されたギャップを埋める必要があります。

正しく動作するテスト ケース

ID が 1、2、3 のテーブル内の 3 つの行から始めます。

次に、ID=2 を削除し、ID=2 を ID=3 に設定します (ギャップを埋めるため)。これは正しく動作します。dataTable.GetChanges() には、削除された行と変更された行が含まれています。dataAdapter.Update(table) を実行すると、正常に実行されます。

動かないテストケース

ただし、2 行 (ID 1 と 2) で開始し、ID=2 の場所に ID=3 を設定し、ID=2 を挿入してから、変更をコミット (または受け入れ) します。これで、最初のテストと同じ状態になるはずです。

次に、以前と同じ手順を実行します。つまり、ID=2 を削除し、ID=3 の ID=2 を設定しますが、dataTable.GetChanges() の順序が間違っています。最初の行は変更された行で、2 番目の行は削除された行です。次に、 dataAdapter.Update(table) を試すと、主キー違反が発生します-削除する前に、行を既存の行に変更しようとしました。

回避策

問題の回避策を考えることができます。つまり、削除された行が最初にコミットされ、次に行が変更され、次に行が追加されるように強制します。しかし、なぜこれが起こっているのですか?別の解決策はありますか?

以前に辞書で同様の「問題」を見たことがあると思います.いくつかのアイテムを追加してから削除し、それらを再挿入すると、それらは追加したのと同じ順序にはなりません(辞書を列挙するとき)。

問題を示す 2 つの NUnit テストを次に示します。

出力:

次のテスト:

出力:

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

c# - DataAdapter 更新方法 - どの接続を使用しますか?

おそらくばかげた質問で申し訳ありません。私はそれについてインターネット上で何も見つけられなかったので、それはおそらく完全に明らかであり、私は見るのを盲目にしています?!

DataAdapter.Update(dataset) を介してデータセットからデータベース内のテーブルを更新しようとしています

ただし、接続を設定する可能性はありません。DA が使用する必要があります。

DA は DB への接続方法をどこで知っていますか? または、dataadapter の概念を誤解していますか?

私の現在のコードは次のようなものです:

これを書いたばかりで、それがどのように機能するか (または機能するかどうか) が疑わしくなりました...適切にテストする前に他のコードを書かなければならないので、これまでのところテストしていません。

ありがとうございました、StackOverflow FTW!

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 に答える
6967 参照

c# - .NETDataSet.HasChangesが誤ってfalse

ブレークポイントでチェックしているときにdsに明らかに変更が加えられているにもかかわらず、ds.hasChanges()がfalseになっていることに気付いた人はいますか?私はかなり長い間それを見てきました、そして私は何が悪いのかわかりません...

HasChangesを使用して行の後にブレークポイントを設定し、DataSet Visualizerを使用すると、DataSetが実際に変更されたことがわかりますが、HasChangesはfalseを返します。

私は明らかなことを見逃していると確信しています...誰かが私が間違っていることを見ることができますか?

乾杯