0

空の DataGridView からデータベースにデータを挿入したい (DataGridView はデータベースから読み込まれませんが、DataGridView で値を取得するだけです)。

私はこのコードを試しました:

private void vButton12_Click(object sender, EventArgs e)
    {
        MySqlConnection conn = new MySqlConnection("server=localhost;User Id=root;database=sma9");
        DataTable dtable = new DataTable();
        MySqlDataAdapter adp = new MySqlDataAdapter("select * from tdetpinjam", conn);
        adp.Fill(dtable);            
        for (int i = 0; i < dtable.Rows.Count; i++)
        {
            MySqlDataAdapter adp1 = new MySqlDataAdapter("INSERT INTO tdetpinjam (nopinjam,kodebuku,jumlah,tglkembali,status) VALUES ('" + dtable.Rows[i][dtable.Columns.IndexOf("Column1")] + "','" + dtable.Rows[i][dtable.Columns.IndexOf("Column2")] + "','" + dtable.Rows[i][dtable.Columns.IndexOf("Column3")] + "','" + dtable.Rows[i][dtable.Columns.IndexOf("Column4")] + "','" + dtable.Rows[i][dtable.Columns.IndexOf("Column5")] + "')", conn);
            conn.Open();
            adp1.Fill(dtable);
            conn.Close();
        }
    }

しかし、「列-1が見つかりません」というエラーが表示されます。

私のコードで何が間違っていますか? これを行うための最良の解決策は何ですか?

4

2 に答える 2

1

これらのいずれかが-1を返すと思います:

dtable.Columns.IndexOf("ColumnX")
于 2012-06-02T15:11:30.223 に答える
0

あなたがしていることは完全に間違っています、あなたのコードにはデータグリッド関連のコードがありません、あなたはデータベーステーブルからデータを取得し、各行が返されてもループし、データベースの同じテーブルに同じデータを再び挿入しようとします。各アイテムで、データベースから同じテーブルに入力しようとします。

特定の列のインデックスを取得すると実際のエラーが発生します。挿入する前に検証する必要があります

    if(dtable.Columns.IndexOf("Column1") != -1 && 
    dtable.Columns.IndexOf("Column2") != -1 && 
    dtable.Columns.IndexOf("Column3") != -1 && 
    dtable.Columns.IndexOf("Column4") != -1 && 
    dtable.Columns.IndexOf("Column5") != -1)
    {
       // insert related code 
    }

MySqlDataAdapter、fist set select、update、およびMySqlDataAdapterの挿入コマンドを使用してレコードを挿入する必要がある場合は、MySqlDataAdapter.Updateメソッドを呼び出すことができます。

詳細については、これを確認してください。

編集

foreach (DataGridViewRow row in dataGrid.Rows)
{
         foreach (DataGridViewCell cell in row.Cells)
        {
            string value = cell.Value.ToString();

        }
 }
于 2012-06-02T15:50:05.573 に答える