0

ここにいる人たちは私が思いついたものですデータベース内のテーブルを更新することを許可していない問題が何であるかを理解することはできません

私が助けを必要としている人たち私はgridc#を使用してデータを介してデータベースを更新する必要がありますが、私ができることは、直接配置したSQLサーバー内の値を確認できることだけです。

string sConnectionString = "Data Source=localhost;Initial Catalog=ScratchCardSystem2;Integrated Security=True;pooling=true";
SqlConnection objConn = new SqlConnection(sConnectionString);
objConn.Open();
string query = "SELECT * FROM store_adj_note_detail_1";
SqlDataAdapter dAdapter = new SqlDataAdapter(query,objConn);
//dAdapter.SelectCommand= new SqlCommand(query, objConn);
SqlCommandBuilder cBuilder = new SqlCommandBuilder(dAdapter);
DataTable dTable = new DataTable();
//fill the DataTable
dAdapter.Fill(dTable);
dataGridView1.DataSource = dTable;

dAdapter.Update(dTable);
4

3 に答える 3

0

これは基本的に私が自分のフォームに使用したものです。接続を確立すると、接続が開き、datagridview1 に store_adj_note_detail_1 のデータが入力されます。
bindingSource を宣言しないことに注意してください...理由もわかりませんが、残りの部分 (グローバル) とローカルで宣言しようとしましたが、両方ともコードが壊れました:/

BindingSource の宣言は、フォームのデザイン ビューで行われます。ツールボックスからフォームの上にドラッグするだけで、FileDialogs や Menustrips のようなアイコンが表示されます。私は個人的に Name プロパティを変更しただけで、イベントを追加しませんでした。

接続を開き、バインディングソースを使用して datagridview と dataTable をリンクし、データベースを更新するために必要なすべての概要を示します。

アクセスデータベースに使用した独自のコードを編集してこのコードを取得しましたが、SQL データベースはまったく同じように機能するように見えますが、エンティティが異なるだけです (OleDb の代わりに sqlDataAdapter など)。

これがあなたに役立つことを願っています!

public partial class FrmDatabaseConnection : Form
{
    // Connection, Adapter, DataTable, CommandBuilder, Bindingsource and command
    private SqlDataAdapter adap;
    private DataTable dataTable;
    private SqlCommandBuilder commandBuilder;
    private string sqlCommand = "SELECT * FROM store_adj_note_detail_1";
    private SqlConnection conDB = new SqlConnection();

    //To open connection and fill datagridview1
    private void establishConnection()
    {
        try
                {
                    conDB.ConnectionString = "Data Source=localhost;Initial Catalog=ScratchCardSystem2;Integrated Security=True;pooling=true";
                    conDB.Open();

                    // Set adapter, commandbuilder, datatable and bindingsource
                    adap = new SqlDataAdapter(sqlCommand, conDB.ConnectionString);
                    commandBuilder = new SqlCommandBuilder(adap);
                    bindSrc = new BindingSource();
                    dataTable = new DataTable();

                    // Fill it!
                    adap.Fill(dataTable);
                    dataGridView1.DataSource = bindSrc;
                    bindSrc.DataSource = dataTable;


                }
                catch (Exception ex)
                {
                    MessageBox.Show("Unable to Open database, " + ex.Message,);
                    conDB.Close();
                }

    }

    private bool saveToDatabase()
    {
        try
                {
                    adap.Update((DataTable)bindSrc.DataSource);
            }
        catch (Exception ex)
                {
                    MessageBox.Show("Unable to Update database, " + ex.Message);
                    return false;
                }

    }


}
于 2013-01-26T23:30:22.093 に答える
0
 OleDbCommandBuilder commandBuilder = new OleDbCommandBuilder(dAdapter);

不足している。MSDN は次のように述べています。

//Without the OleDbCommandBuilder this line would fail.
dAdapter.Update(dTable);
于 2013-01-26T16:59:08.180 に答える
0

datagridview をデータテーブルにバインドするものがありません。ここでの秘訣は、BindingSource が必要だということです。

「//fille the datatble」行の前に次を追加します

BindingSource bindSrc = new BindingSource();

次に、datagridview のデータソースを変更し、次のようにバインディングソースにもソースを追加します。

dataGridView1.DataSource = bindSrc;  
bindSrc.DataSource = dTable;

編集:私は小さなことを言及するのを忘れていました.更新するには、あなたのbindingSrouceのソースであるデータテーブルを参照する必要があります.これは私がやった方法です:

dAdapter.Update((DataTable)bindSrc.DataSource);

通常の更新(dTable)だけで可能かもしれませんが、そうでない場合はおそらくこれで修正されます

于 2013-01-26T17:02:15.280 に答える