• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:DataSetの更新時のエラーについて。)

DataSetの更新時のエラーについて

このQ&Aのポイント
  • VB.NETのSqlDataAdapterから生成したDataSetを使用しています。DataGrid上でレコードを削除する際に、更新ボタンを押すとエラーが発生します。
  • エラーの内容は「削除された行を含むDataRowコレクションが渡されたときに、有効なDeleteCommandが必要です」というものです。
  • 他のページでは同じ処理がうまく動いているので、何が足りないのか理由がわかりません。追加の時には問題ないのですが、更新時にだけエラーが発生します。

質問者が選んだベストアンサー

  • ベストアンサー
noname#187541
noname#187541
回答No.1

こんにちは。 CommandBuilderを発行させておけばうまくいくと思います。 参考ページを載せておきますね。

参考URL:
http://homepage1.nifty.com/rucio/main/dotnet/Samples/SmpleCnt.htm
usui323
質問者

お礼

ありがとうございました! 解決しました!(^-^)

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • VB2010 DataSet 更新

    VB2010で社員名簿を作成しています。Form1にDataGridViewを使って名簿を作成し、Form2で更新のボタンを押します。 次のようにプログラムを作成しましたが、更新できません。エラーも出ません。 DataRowをdeleteで消して、それを保存する方法です。 どこが悪いのでしょうか。ご存知の方はご教授いただけませんでしょうか。 ’新年度につきForm1の社員名簿のDATAを初期化する Dim j As Integer For j = 0 To Form1.DataGridView1.Rows.Count - 1 Form1.DataSet1.社員名簿.Rows(j).Delete() Next ’ 初期化した社員名簿を保存する Form1.社員名簿TableAdapter1.Update(Form1.DataSet1.社員名簿)

  • 「テーブルに主キーがありません。」というエラーが出て困ってます。

    VisualStudioでASP.NETをやってます。初心者です。 データグリッドの削除ボタンを押して行を削除したいのですが、 テーブルに主キーがありません。というエラーが出てしまいます。 テーブルに主キーはあるんですけれども、原因がわかりません。 Dim mytable As DataTable Dim myrow As DataRow Dim key As String SqlDataAdapter1.Fill(DataSet11) key = DataGrid1.DataKeys(e.Item.ItemIndex) mytable = DataSet11.Tables("テーブル名") ↓ここでエラーになるようです。 myrow = mytable.Rows.Find(key) myrow.Delete() ご存知の方いらっしゃいましたら、よろしくお願いします。

  • VB.NETからアクセス

    お世話になります。ちょっと急ぎでお聞きしたいのですが、アクセスの、あるテーブルに新しい行を追加したくて次のように記述すると、「更新には、新しい行を含むDataRowコレクションが渡されたとき、有効なINSERT COMMANDが必要です。」とでました。 Dim rw As DataRow rw = DataSet11.Tables(1).NewRow rw.Item("年") = "2004" rw.Item("月") = "10" DataSet11.Tables(1).Rows.Add(rw) OleDbDataAdapter1.Update(DataSet11) なにか良い解決方法はあるでしょうか?  すみません、よろしくお願いします。

  • C#でAccess2003データ更新時に発生するのエラーの内容がわからなくて困っています。

    お世話になります。 とある工場で使用されているデータベースの内容をC#で変更、更新を するプログラム改造を手がけています。データベースはAccess2003で 作成されていて、データベースの読込み、変更、更新はできるのですが、 一部のフィールド名に "DateTime" 、"String" と名前がつけられている箇所があり、この部分については"UPDATEステートメントの構文エラーです" となってしまします。他の部分については全く問題なく更新できています。例えば"Data01"など… プログラム概要は System.Data.OleDb.OleDbConnection cn; System.Data.OleDb.OleDbDataAdapter ap; System.Data.OleDb.OleDbCommandBuilder cb; DataSet ds; DataRow dr; DataTable dt; ---処理--- dt.Rows[n]["DateTime"] = DateTime.Now.ToString(); ap.Update(ds,"t_MINIDATATBL"); となっており、"DateTime" "String"フィールドのところだけアップデート実行のところで例外処理となってしまいます。 "DateTime"や"String"などのようにC#で使われているキーワードと同じ名前はまずいのでしょうか? しかし、データベースは客先の物なので勝手にフィールド名は変えられません。 一時的にフィールド名を変更して、処理終了時に元のフィールド名に戻すなどという手法などありますでしょうか? また、他の方法などもありましたらご教授願います。 環境: コンパイラ VisualStudio2008 C# データベース Microsoft Access2003 以上、よろしくお願い致します。

  • DataSet(DataTable)の使い方

    GridViewやListViewなどに動的にデータを追加していきたいので、 DataTableを使おうと思いました。 下記、(1)のようにPageLoadイベントで1行追加することはできたのですが、 ボタンを押すごとに、1行ずつ追加していきたいので(2)のように修正したのですが、 ボタンを押したときのポストバックで、DataSetもDataTableもnullになってしまい、 行の追加ができません。 ボタンを押すごとにどんどん行を追加していきたいのですが、このような場合は どのようにDataSetもDataTableを保持しておけば良いのでしょうか。 (1) public partial class WebForm1 : System.Web.UI.Page { int count = 0; protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { DataSet dS = new DataSet("dS"); DataTable dT = new DataTable("dT"); // データテーブル カラム作成 dT.Columns.Add("no", typeof(int)); dT.Columns.Add("name", typeof(string)); dT.Columns.Add("kind", typeof(string)); dT.Columns.Add("time", typeof(int)); dS.Tables.Add(dT); DataRow dR = dT.NewRow(); dR["no"] = count; dR["name"] = count.ToString(); dR["kind"] = count.ToString(); dR["time"] = count; dT.Rows.Add(dR); // リストビュー データソース選択 ListView2.DataSource = dS; ListView2.DataBind(); } } } (2) public partial class WebForm2 : System.Web.UI.Page { int count = 0; DataSet dS; DataTable dT; protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { dS = new DataSet("dS"); dT = new DataTable("dT"); // データテーブル カラム作成 dT.Columns.Add("no", typeof(int)); dT.Columns.Add("name", typeof(string)); dT.Columns.Add("kind", typeof(string)); dT.Columns.Add("time", typeof(int)); dS.Tables.Add(dT); } } protected void Button1_Click(object sender, EventArgs e) { count = count + 1; DataRow dR = dT.NewRow(); dR["no"] = count; dR["name"] = count.ToString(); dR["kind"] = count.ToString(); dR["time"] = count; dT.Rows.Add(dR); // リストビュー データソース選択 ListView2.DataSource = dS; ListView2.DataBind(); } }

  • Windows Updateで更新プログラム確認中にエラーが発生する

    携帯電話から失礼します。 PCから読みにくいかもしれませんがよろしくお願いします。 ツールバー内のWindows Defenderに注意マークがつき、 更新プログラムの確認を促すメッセージがあったので 「更新プログラムを今すぐ確認する」ボタンを押すと、 定義の更新を確認出来ません、エラーが見つかりました:コード0x80072efd と表示されてしまいました。 Windows Updateを試しても同じエラーが発生し、 新しい更新プログラムを確認中にエラーが発生しました というメッセージが表示されました。 ヘルプを確認したところ、ファイアウォールの例外一覧に http://*.update.microsoft.com https://*.update.microsoft.com http://download.windowsupdate.com を追加するようにあるのですが、 例外に追加するにはプログラムから選択式で URLの入力で追加する方法がわかりませんでした。 更新履歴を確認すると、 Windows Vista Service Pack2 Windows Update エージェント が更新された後から今の状態になっているようです。 また今の状態になってから、関係があるかはわかりませんが Yahoo!JAPANやgoo、他にもログインページ自体に接続できません。 IEではこのページは表示できません、というページになり、 接続の問題を診断しても問題はありませんでした。 Vistaを使っていて、 ウイルスソフトはSpy sweeperです。 解決法を教えていただきたいです。 よろしくお願いします。

  • vb.net トランザクション処理について

    VB2005、SQLServer2005環境です。 VB.Netのトランザクション処理でエラーが発生します。 エラー内容の意味すらわかりません。 どなたかご教授お願いします。 *エラー内容 "System.InvalidOperationException: ExecuteReader は、コマンドに割り当てられた接続が保留状態である ローカルのトランザクションにあるとき、トランザクション オブジェクトを持つコマンドが必要です。 コマンドの Transaction プロパティがまだ初期化されていません。 Private Sub BTN_更新_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BTN_更新.Click Dim strsql As String Dim Tran As SqlClient.SqlTransaction = Nothing '---DB接続 Call DBConnect() Try '---SQL文作成 strsql = "SELECT * FROM Aテーブル" '---SQL文を作成して実行する Dim comm As SqlCommand = New SqlCommand(strsql, Con) '---データアダプタの作成 Dim dataadapter As SqlDataAdapter = New SqlDataAdapter(comm) '---データセットへの読み込み Dim ds As DataSet = New DataSet() dataadapter.Fill(ds, "Aテーブル") Dim dt As New DataTable dt = ds.Tables("Aテーブル") '---主キーの設定 dt.PrimaryKey = New DataColumn() {dt.Columns("Aテーブル")} '---データの更新 Dim targetRow As DataRow targetRow = dt.NewRow() targetRow = dt.Rows.Find(TXT_コード.Text) targetRow("コード") = TXT_コード.Text targetRow("氏名") = TXT_氏名.Text '---コマンド自動作成 Dim cb As SqlCommandBuilder = New SqlCommandBuilder(dataadapter) '---トランザクション開始 Tran = Con.BeginTransaction() '---データベースの更新 dataadapter.Update(ds, "社員テーブル")     <<<エラーになります。 '---トランザクション完了 Tran.Commit() Catch oExcept As Exception '---ロールバック Tran.Rollback() '例外が発生した時の処理 MessageBox.Show(oExcept.ToString, "例外発生") Finally '---DB切断 Call Disconnect() End Try

  • ASP.NETの実行時のエラーについて

    ASP.NETを勉強しているのですが、DataGridを用いて単にDBの中身を表示させようとしたのですが、次のエラーが出て実行できません。 「System.StackOverflowException の例外がスローされました」 例外の詳細: System.StackOverflowException: 種類 System.StackOverflowException の例外がスローされました。 ソース エラー: 現在の Web 要求の実行中にハンドルされていない例外が生成されました。障害の原因および発生場所に関する情報については、下の例外スタック トレースを使って確認できます。 スタック トレース: [StackOverflowException: 種類 System.StackOverflowException の例外がスローされました。] このエラーはどのような意味なのでしょうか。調べているのですが、よくわかりません。 解決法を教えていただけないでしょうか。 よろしくお願いいたします。

  • c#によるdatasetからdatagridviewの操作

    C#を始めたばかりの初心者です。 今いろいろ最初からボタンをセットしたり徐々に進んでいるのですが、今datasetとdatagridviewの場所でつまずいています。 デザイン上でデータセットをセットしdatatableテーブル名(abc)をつけcolumnにa,b,c,d,eと5つ列を追加しました。 そしてdatagridviewを制作しデータソースの選択で上記で作ったdatasetを割り当てました。 そのあとが質問なのですが、datasetにa,b,c,d,eにデータをtextboxから5個入力し。datasetに追加できたら次々とdatagridviewに表示させていき、ある程度までたまったら選択した行のeを更新してみたいのですが。 インターネットを探しているとmdbなどアクセスなどとつなげてるのが多かったのですが、アクセスなどのソフトとつなげないとこの内容は無理だったりするのでしょうか。 Visual C#2005逆引き大全で勉強しているのですがもしよければプログラミング方法など教えていただけたら幸いです。

  • VB.NET LoadDataRowでDBデータの更新ができない

    VB.NETですが、 DataSet.Tables(0).LoadDataRow()でデータの更新をしたいのですが DBに登録されません。なぜでしょうか 以下の手順の処理で問題があるのでしょうか? 以下ソース pAddUpdList(0) = "2" pAddUpdList(1) = "2" pAddUpdList(2) = "col1data" pAddUpdList(3) = "col2data" f(ここでwDataSet.Tables(0)のプライマリーキーの設定処理) wDataSet.Tables(0).BeginLoadData() Dim myRow As DataRow myRow = wDataSet.Tables(0).LoadDataRow(pAddUpdList, True) wDataSet.Tables(0).EndLoadData() ' ここの時点でwDataSetはちゃんと更新されているのですが f(ここでOleDbDataAdapter.Update(wDataSet):DBアップデート処理) 'しかしDBに反映されてない ------ LoadDataRowでネットを検索してみたのですが、ヒットするものがあまりありません。 サンプルなどがあれば教えていただきたいのですが。