1

C# でデータベースを操作する方法について学習しようとしていますが、DataSet 、 SqlDataAdapter 、および SqlCommandBuilder を操作する必要があるチュートリアルの一部に到達しました。これは、チュートリアルの例で記述したコードです。

 public void InitData() {
        //instantiate the connection
        conn = new SqlConnection("Data Source=.\\SQLEXPRESS;AttachDbFilename=\"D:\\Projects IDE\\Visual Studio\\Exercitii\\Console.app\\WindowsFormsApplication1\\WindowsFormsApplication1\\PlanetWrox.mdf\";Integrated Security=True;User Instance=True");

        //1.instantiate a new DataSet
        dsCustomers = new DataSet();

        //2.init SqlDataAdapter with select command and connection
        daCustomers = new SqlDataAdapter("SELECT Id ,Name, SortOrder FROM Genre", conn);

        // 3. fill in insert, update, and delete commands
        SqlCommandBuilder cmdBldr = new SqlCommandBuilder(daCustomers);

        // 4. fill the dataset
        daCustomers.Fill(dsCustomers, tableName);
    }

    public void btnUpdateClicked(object sender, EventArgs e) {
        // write changes back to DataBase
        daCustomers.Update(dsCustomers, tableName);

    }   

ここで理解できないことがいくつかあります。

最初に気付いたのは、データベースを開いたり閉じたりする必要がないということです。データベースに関する限られた知識から、データにアクセスするにはデータベースへの接続を開く必要があり、完了後にはそれを閉じる.これは舞台裏のどこかで起こっているに違いない.そうですか? それがそうなら、魔女の方法はそれをしますか?

2 番目の質問は、SqlDataAdapter と SqlCommandBuilder に関するものです。ここで SqlCommandBuilder が何をしているのかわかりません。SQL クエリを実行しているのは SqlDataAdapter ではありませんか?

4

6 に答える 6

2

最初に気付いたのは、データベースを開いたり閉じたりする必要がないことです。

SqldataAdapter.Fill接続を開閉します。

Fill が呼び出される前に IDbConnection が閉じられた場合は、IDbConnection が開かれてデータが取得されてから閉じられます。Fill が呼び出される前に接続が開いている場合は、開いたままになります。

指定したSqlCommandBuilderselect-statement のメタデータから INSERT、UPDATE、または DELETE ステートメントを生成します。この方法で呼び出すことができdaCustomers.Update、 に加えられたすべての変更がDataSetデータベースで自動的に更新されます。

于 2012-10-09T11:31:29.620 に答える
1

dsCustomers.Fill は、接続を開いたり閉じたりします。SqlCommandBuilder は、select ステートメントに基づいて挿入、更新、および削除を作成します。

于 2012-10-09T11:29:18.947 に答える
1

テーブルにデータを入力すると、ADO.NETがそのタスクを処理します

于 2012-10-09T11:30:45.973 に答える
0
//instantiate the connection
  using (SqlConnection conn = new SqlConnection("Data Source=.\\SQLEXPRESS;AttachDbFilename=\"D:\\Projects IDE\\Visual Studio\\Exercitii\\Console.app\\WindowsFormsApplication1\\WindowsFormsApplication1\\PlanetWrox.mdf\";Integrated Security=True;User Instance=True"))
  {
    //1.instantiate a new DataSet
    dsCustomers = new DataSet();

    //2.init SqlDataAdapter with select command and connection
    daCustomers = new SqlDataAdapter("SELECT Id ,Name, SortOrder FROM Genre", conn);

    // 3. fill in insert, update, and delete commands
    SqlCommandBuilder cmdBldr = new SqlCommandBuilder(daCustomers);

    // 4. fill the dataset
    daCustomers.Fill(dsCustomers, tableName);
  }

これにより、気にすることなく、接続が自動的に閉じられ、破棄されます。

于 2012-10-09T11:38:54.350 に答える
0

あなたの最初のこと:

conn.open();接続を開き、接続conn.close();を閉じるために使用します。

ここであなたのプログラムでは、sqlserverのようにデータベースに接続していません。ファイルへの表示された物理パスを指定しました。

2番目のことについては、以下を参照してください。

SqlCommandBuilder クラス

于 2012-10-09T11:53:07.433 に答える
0

Fillをすべて にしresources locked that are involved in the processます。また、SQL 設定に従って、他のリソースもブロックされる可能性があります。

このコードをリアルタイムの作業に使用している場合は、必要な場合にのみ選択してください。

于 2012-10-09T11:42:53.443 に答える