2

それぞれが相互にリンクされた複数のテーブルを持つデータベースがあります。(リレーショナル データベース) データセットからデータベースにレコードを挿入したいと考えています。最初に OledbCommandBuilder を使用してみましたが、うまくいきませんでした。リレーショナル データベースでは機能しないことがわかりました。データセット内でテーブルをリンクしていません。それらはデータベース内でのみリンクされています。私が持っているのは、「コミット」という名前のボタンです。そのボタンを押すと、dataset.datatable のすべての変更がそれぞれのデータベース テーブルに反映されます。一度に 1 つのレコードを INSERT、UPDATE、DELETE する方法しか知りませんが、最初にこれを行わなければならないため、これも時間のかかる作業です。

保存ボタンのコード

             DataRow dRow = bookDS.Tables["Book"].NewRow();

               dRow[0] = Convert.ToInt64(textBookID.Text);
               dRow[1] = textBookName.Text;
               dRow[2] = textISBN.Text;

など(30列あります)

              bookDS.Tables["Book"].Rows.Add(dRow);

それで

コミットボタンのコード

con.Open();

                    string sql = "Insert INTO Book Values (@BookId, @BookName, @ISBNNo, @PublicationId, @CategoryId, @Pages,@Price,@Author1,@Author2,@TotalCopies,@IssuedCopies,@AvailableCopies,@SupplierName,@Note)";

                    OleDbCommand save = new OleDbCommand(sql);

                    save.Parameters.Add("@BookId", OleDbType.BigInt).Value = Convert.ToInt64(dRow[0]);
                    save.Parameters.Add("@BookName", OleDbType.BSTR).Value = dRow[1];
                    save.Parameters.Add("@ISBNNo", OleDbType.BSTR).Value = dRow[2];

等々...

save.Connection = con; save.ExecuteNonQuery();

                    con.Close();

私が考えることができるのはそれだけですが、それは単一の行でしか機能しないため、SAVE ボタンを押すたびに COMMIT ボタンを押す必要があるようです。

誰でもこれで私を助けてもらえますか???

PS : MSAccess を使用していますが、TABLEADAPTER も使用したくありません (自分のコードですべてを実行したい)

4

2 に答える 2

0
       string sql = "Insert INTO Book Values (@BookId, @BookName, @ISBNNo, @PublicationId, @CategoryId, @Pages,@Price,@Author1,@Author2,@TotalCopies,@IssuedCopies,@AvailableCopies,@SupplierName,@Note)";

     DataRow dRow = bookDS.Tables["Book"].NewRow();

                   dRow[0] = Convert.ToInt64(textBookID.Text);
                   dRow[1] = textBookName.Text;
                   dRow[2] = textISBN.Text;
                   bookDS.Tables["Book"].Rows.Add(dRow);
//This would help you to commit all the changes at once.   
 bookDS.AcceptChanges();
于 2012-10-26T10:19:31.733 に答える
0

http://msdn.microsoft.com/en-us/library/xzb1zw3x.aspx

このジョブには OleDBDataAdapter を使用してみてください。または、OleDBComamndBuilder (Sql の代わりに Access データベース用の OleDb) を使用することもできます。

http://www.daniweb.com/software-development/csharp/threads/380925/how-to-save-a-dataset-into-a-database

于 2012-10-26T10:16:06.447 に答える