1

以下は、データベースに最初の行の値のみを保存するように記述したコードですが、複数の行の値を保存しようとするとエラーが発生します。このコードでループを使用する方法と、ループを使用してデータベースに複数の行を一度に挿入する場所がわかりません。

DataGridView の値を SQL Server データベースに保存するにはどうすればよいですか?

private void button1_Click(object sender, EventArgs e)
{
    SqlCommand cmd = new SqlCommand("INSERT INTO datagrid (sr, name, email, tel_no) VALUES(@c1,@c2,@c3,@c4)", cs);
    {
        cmd.Parameters.Add(new SqlParameter("@C1", SqlDbType.VarChar));
        cmd.Parameters.Add(new SqlParameter("@C2", SqlDbType.VarChar));
        cmd.Parameters.Add(new SqlParameter("@C3", SqlDbType.VarChar));
        cmd.Parameters.Add(new SqlParameter("@C4", SqlDbType.VarChar));

        cs.Open();

        foreach (DataGridViewRow row in dataGridView1.Rows)
        {
            {
                if (!row.IsNewRow)
                {
                    cmd.Parameters["@C1"].Value = row.Cells[0].Value;
                    cmd.Parameters["@C2"].Value = row.Cells[1].Value;
                    cmd.Parameters["@C3"].Value = row.Cells[2].Value;
                    cmd.Parameters["@C4"].Value = row.Cells[3].Value;
                    cmd.ExecuteNonQuery();
                }
                cs.Close();
            }
        }
    }
}
4

4 に答える 4

3

元の質問に記載していない、あると便利な情報がいくつかあります。

  1. csである可能性が最も高く、SqlConnection1行を挿入しても機能すると言うので、それはグローバル(クラスレベル)変数であり、別の場所に作成されていると思います。私は少し違ったやり方をします (理由については私のコード例を参照してください)。

  2. どのようなエラーが発生していますか? 問題の説明に基づいて、それは閉じられた接続であると思います (foreach コード ブロックの外側で閉じる必要があるときに、foreach コード ブロックの最後で閉じているため)。

そうは言っても、ここにあなたのためにトリックを行うかもしれない何かがあります:

private void button1_Click(object sender, EventArgs e)
{

    using (SqlConnection conn = new SqlConnection(connectionString))
    {

        cs.Open();

        foreach (DataGridViewRow row in dataGridView1.Rows)
        {

            if (!row.IsNewRow)
            {
                using (SqlCommand cmd = new SqlCommand("INSERT INTO datagrid (sr, name, email, tel_no) VALUES(@c1,@c2,@c3,@c4)", conn))
                {

                    cmd.Parameters.AddWithValue("@C1", row.Cells[0].Value);
                    cmd.Parameters.AddWithValue("@C2", row.Cells[1].Value);
                    cmd.Parameters.AddWithValue("@C3", row.Cells[2].Value);
                    cmd.Parameters.AddWithValue("@C4", row.Cells[3].Value);

                    cmd.ExecuteNonQuery();

                }
            }
        }
    }
}

上記の例では、およびオブジェクトusingにブロックを使用しています。using ブロックは、using ブロックが終了したときにリソースが適切にクリーンアップされることを保証します。これにより、ブロックがそれを処理するため、いつ呼び出すかなどを心配する必要がなくなります。SqlConnectionSqlCommandconn.Close()using

また、SqlConnectionメソッドで を作成します。このconnectionString場合の は、接続文字列を保持する文字列変数になります (クラス レベルで、それを必要とするすべてのメソッドがそれにアクセスできます)。

最後に、式が true と評価されたSqlCommand場合にのみ入力される if ブロック内にを作成します。!row.IsNewRow既存のコマンドのパラメーターに値を再割り当てできるかどうかは 100% 確信が持てません (ほとんどの場合、可能ですが...)

また、挿入に問題が発生した場合に備えて、エラー処理を含めることをお勧めします。

うまくいけば、これはあなたが持っている質問/問題に対処します. そうでない場合は、詳細をお知らせください。より適切なサポートを提供いたします。ハッピーコーディング!

于 2013-06-25T06:57:46.200 に答える
0
int ab;

 int PIrowss = dataGridView2.Rows.Count;

 for (ab = 0; ab < PIrowss; ab++)

 {

 PiCGetAutID();

 purchaeOrder.pcautoid = Catget;

 purchaeOrder.ponum = label119.Text;

 purchaeOrder.col1 = dataGridView2.Rows[ab].Cells[0].Value.ToString();

 purchaeOrder.col2 = dataGridView2.Rows[ab].Cells[1].Value.ToString();

 purchaeOrder.col3 = dataGridView2.Rows[ab].Cells[2].Value.ToString();

 purchaeOrder.col4 = dataGridView2.Rows[ab].Cells[3].Value.ToString();

  purchaeOrder.col5 = dataGridView2.Rows[ab].Cells[4].Value.ToString();


 purchaeOrder.POcSave();

}
于 2014-03-02T09:51:49.337 に答える
-1
  private void button1_Click(object sender, EventArgs e)
        {                  
SqlConnection conn = new SqlConnection();
conn.Open();

SqlCommand comm = new SqlCommand();
comm.Connection = conn;

string sr = null;
string name = null;
string email = null;
string tel_no = null;


for (int i = 0; i <= this.DataGridView1.Rows.Count; i++) {
sr == this.DataGridView1.Rows(i).Cells(0).Value.ToString()
name == this.DataGridView1.Rows(i).Cells(1).Value.ToString()
email == this.DataGridView1.Rows(i).Cells(2).Value.ToString()
tel_no == this.DataGridView1.Rows(i).Cells(3).Value.ToString()

 comm.CommandText = "insert into mytable(name,age) values('" & name & "','" & age& "')"
   comm.ExecuteNonQuery()

conn.Close()


}

}

これを試してみてください。それはうまくいくはずです

于 2013-06-25T06:34:19.937 に答える