6

dataAdapter.Fill()私は MSDN リソースといくつかのフォーラムを読んでいますが、これら 2 つのとの違いはまだわかりません。dataAdapter.Update()両方を使用してプログラムからデータベースを更新しようとしましたが、動作しますが、削除しようとすると機能、それはまだ完全にupdate()機能しているため、役に立たないと思います。

誰でもこれを明確にしてもらえますか?

編集:これは削除する私のコードです:

string connString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\Users\\Public\\Documents\\inventorySystem\\branches\\Database\\inventorySystemDatabase.accdb";
string query = "DELETE FROM Product WHERE product_id=" + productDataGridView[1, e.RowIndex].Value.ToString();
OleDbDataAdapter dAdapter = new OleDbDataAdapter(query, connString);
OleDbCommandBuilder deleteBuilder = new OleDbCommandBuilder(dAdapter);
DataTable deleteTable = new DataTable();
dAdapter.Update(deleteTable);

-- datagridview を更新するには、追加の選択コマンドを作成する必要があります --

4

2 に答える 2

6

作業サンプル

using System;
using System.Data;
using System.Windows.Forms;
using System.Data.OleDb;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        private OleDbConnection con =
            new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=\"C:\\test.mdb\";");

        private OleDbDataAdapter adapter;
        DataTable table = new DataTable("person"); 

        public Form1()
        {
            InitializeComponent();

        }

        private void Form1_Load(object sender, EventArgs e)
        {
            con.Open();
            ;
            adapter = new OleDbDataAdapter("select ID, p_name, p_age from person", con);
            adapter.Fill(table);
            OleDbCommandBuilder builder = new OleDbCommandBuilder(adapter);
            adapter.DeleteCommand = builder.GetDeleteCommand();
            adapter.UpdateCommand = builder.GetUpdateCommand();
            adapter.InsertCommand = builder.GetInsertCommand();
            dataGridView1.DataSource = table;

        }

        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            con.Close();
            con.Dispose();
        }

        private void btnDelete_Click(object sender, EventArgs e)
        {
            DataRow[] row = table.Select("p_age = 10");
            if (row.Length > 0)
            {
                for (int i = 0; i < row.Length; i++)
                {
                    row[i].Delete();
                }
            }
            adapter.Update(table);
        }

    }
}

簡単な言葉で。

DataAdapter.Fill()は、データベースからデータをロードするために使用されます

例:データベースからグリッドビューへのデータの表示

using (DataTable table = new DataTable()) {

    using (OleDbDataAdapter adapter = new OleDbDataAdapter("select name,age from person", conObject)) {

        adapter.Fill(table);
        BindingSource bs = new BindingSource { DataSource = table };
        dgReader.DataSource = bs;    
    }

}

編集が完了すると、DataAdapter.Update()は、基になる接続を使用して、変更されたすべてのデータ情報をデータベースにコミットします。

DataAdapter.Fill()

Fill メソッドは、関連する SelectCommand プロパティで指定された SELECT ステートメントを使用して、データ ソースから行を取得します。SELECT ステートメントに関連付けられた接続オブジェクトは有効である必要がありますが、開いている必要はありません。Fill が呼び出される前に接続が閉じられた場合は、データを取得するために接続が開かれ、その後閉じられます。Fill が呼び出される前に接続が開いている場合は、開いたままになります。

次に、Fill 操作は、DataSet 内の宛先 DataTable オブジェクトに行を追加し、DataTable オブジェクトがまだ存在しない場合は作成します。DataTable オブジェクトを作成する場合、Fill 操作は通常、列名のメタデータのみを作成します。ただし、MissingSchemaAction プロパティが AddWithKey に設定されている場合は、適切な主キーと制約も作成されます。

DataAdapter.Update()

更新は行ごとに実行されます。挿入、変更、および削除された行ごとに、Update メソッドはその行に対して実行された変更の種類 (挿入、更新、または削除) を判別します。変更の種類に応じて、Insert、Update、または Delete コマンド テンプレートが実行され、変更された行がデータ ソースに伝達されます。アプリケーションが Update メソッドを呼び出すと、DataAdapter は RowState プロパティを調べ、DataSet で構成されたインデックスの順序に基づいて、必要な INSERT、UPDATE、または DELETE ステートメントを行ごとに繰り返し実行します。たとえば、Update は、DataTable 内の行の順序により、DELETE ステートメントを実行した後、INSERT ステートメントを実行し、さらに別の DELETE ステートメントを実行する場合があります。

これらのステートメントはバッチ処理として実行されないことに注意してください。各行は個別に更新されます。ステートメントの種類の順序を制御する必要がある場合 (たとえば、UPDATE の前に INSERT を実行する場合)、アプリケーションは GetChanges メソッドを呼び出すことができます。詳細については、「DataAdapter を使用したデータ ソースの更新 (ADO.NET)」を参照してください。

于 2013-01-13T16:31:52.633 に答える
4

略して定義。

DataAdapter.Fill()サーバーからデータベースへのSELECTクエリステートメントを表します。

// 1
// Open connection
using (SqlConnection c = new SqlConnection(
        Properties.Settings.Default.DataConnectionString))
{
   c.Open();
   // 2
   // Create new DataAdapter
   using (SqlDataAdapter a = new SqlDataAdapter("SELECT * FROM EmployeeIDs", c))
     {
      // 3
      // Use DataAdapter to fill DataTable
         DataTable t = new DataTable();
         a.Fill(t);

         // 4
         // Render data onto the screen
         // dataGridView1.DataSource = t; // <-- From your designer
    }
  }

DataAdapter.Update()サーバーからデータベースへのUpdateInsert、およびDeleteクエリステートメントを表します。

public DataSet CreateCmdsAndUpdate(DataSet myDataSet,string myConnection,string mySelectQuery,string myTableName) 
{
    OleDbConnection myConn = new OleDbConnection(myConnection);
    OleDbDataAdapter myDataAdapter = new OleDbDataAdapter();
    myDataAdapter.SelectCommand = new OleDbCommand(mySelectQuery, myConn);
    OleDbCommandBuilder custCB = new OleDbCommandBuilder(myDataAdapter);

    myConn.Open();

    DataSet custDS = new DataSet();
    myDataAdapter.Fill(custDS);

    //code to modify data in dataset here

    //Without the OleDbCommandBuilder this line would fail
    myDataAdapter.Update(custDS);

    myConn.Close();

    return custDS;
 }

参考:
C# SqlDataAdapter
DataAdapter.Update メソッド

于 2013-01-13T16:35:25.703 に答える