9

さまざまなアクションとユーザーのデータ操作によって作成された datagridview があります。グリッドビューのすべてのデータを一度にデータベースに挿入したいのですが、次のようなコードを試すことができます。

for(int i=0; i< dataGridView1.Rows.Count;i++)
    {
        string StrQuery= @"INSERT INTO tableName VALUES (" + dataGridView1.Rows[i].Cells["ColumnName"].Value +", " + dataGridView1.Rows[i].Cells["ColumnName"].Value +");";

      try
      {
        using (SqlConnection conn = new SqlConnection(ConnString))
        {
            using (SqlCommand comm = new SqlCommand(StrQuery, conn))
            {
                conn.Open();
                comm.ExecuteNonQuery();
            }
        }
      }

しかし、レコードが挿入されるたびに新しい接続を作成するのは公平でしょうか? データグリッドには多くの行が含まれている可能性があります...すべてのデータを一度にサーバーに送信し、SQL でループしてすべてのデータを挿入する方法はありますか?

4

8 に答える 8

20

for ループを移動すると、複数の接続を作成する必要がなくなります。コード ブロックを簡単に編集するだけです (決して完全に正しいわけではありません)。

string StrQuery;
try
{
    using (SqlConnection conn = new SqlConnection(ConnString))
    {
        using (SqlCommand comm = new SqlCommand())
        {
            comm.Connection = conn;
            conn.Open();
            for(int i=0; i< dataGridView1.Rows.Count;i++)
            {
                StrQuery= @"INSERT INTO tableName VALUES (" 
                    + dataGridView1.Rows[i].Cells["ColumnName"].Text+", " 
                    + dataGridView1.Rows[i].Cells["ColumnName"].Text+");";
                comm.CommandText = StrQuery;
                comm.ExecuteNonQuery();
            }
        }
    }
}

一度に複数の SQL コマンドを実行する方法については、次のリンクを参照してください: 単一の SqlCommand での複数のステートメント

于 2012-05-11T18:26:18.140 に答える
4

Commands オブジェクトを使用するのではなく、TableAdaptersを使用するのが最善の方法だと思います。その Update メソッドは、Dataset または DataTable 内で行われたすべての変更 (更新、挿入、および削除) をデータベースに直接送信します。通常、DataGridView を使用する場合、BindingSource にバインドします。これにより、Datatables や Datasets などの DataSource と対話できます。

このように作業する場合、境界のある DataGridView で次のことができます。

this.customersBindingSource.EndEdit();
this.myTableAdapter.Update(this.myDataSet.Customers);

「customersBindingSource」は、DataGridView の DataSource です。

アダプターの Update メソッドは、単一のデータ テーブルを更新し、テーブル内の各データ行の RowState に基づいて正しいコマンド (INSERT、UPDATE、または DELETE) を実行します。

から: https://msdn.microsoft.com/en-us/library/ms171933.aspx

そのため、Update メソッドを使用すると、DatagridView 内で行われたすべての変更がデータベースに反映されます。

TableAdapters の詳細: https://msdn.microsoft.com/en-us/library/bz9tthwx.aspx

于 2015-08-01T17:09:11.750 に答える
1

以下が役立つかどうかを確認してください

クラス Post_Sales

Public Shared Sub Post_sales()

    Dim ITM_ID As Integer

    Dim SLS_QTY As Integer

    Dim SLS_PRC As Double

    Dim SLS_AMT As Double

    Dim DSPL_RCT As String

    Dim TAX_CODE As Integer


    'Format the current  date and send it to a textbox
    Form1.TextBox6.Text = System.DateTime.Now.ToString((" yyyy-MM-dd"))

    'Open Connection

    Dim con As New SqlConnection("Initial Catalog=Your Database here;Data source=.;Network Library=DBMSSOCN;User ID=sa;Password=")

    con.Open()

    'Insert Records into the database


    For Each rw As DataGridViewRow In Form1.DataGridView1.Rows

        ITM_ID = rw.Cells("Column1").Value
        DSPL_RCT = rw.Cells("Column2").Value
        SLS_QTY = rw.Cells("Column3").Value
        SLS_PRC = rw.Cells("Column4").Value
        SLS_AMT = rw.Cells("Column5").Value
        TAX_CODE = rw.Cells("Column6").Value

        Dim cmd As New SqlCommand("INSERT INTO DAY_PLUSALES (DT,ITM_ID,DSPL_RCT,SLS_QTY,SLS_PRC,SLS_AMT,TAX_CODE) values ('" & Form1.TextBox6.Text & "','" & ITM_ID & "','" & DSPL_RCT & "','" & SLS_QTY & "','" & SLS_PRC & "','" & SLS_AMT & "','" & TAX_CODE & "')", con)

        cmd.ExecuteNonQuery()

    Next

    con.Close()

    MessageBox.Show("Records Added to the SQL Database successfully!", "Records Updated ")

End Sub

クラス終了

于 2016-11-03T06:01:34.663 に答える
0

一度開いた接続で同じことができます。このようなもの。

for(int i=0; i< dataGridView1.Rows.Count;i++)
  {
    string StrQuery= @"INSERT INTO tableName VALUES (" + dataGridView1.Rows[i].Cells["ColumnName"].Value +", " + dataGridView1.Rows[i].Cells["ColumnName"].Value +");";

  try
  {
      SqlConnection conn = new SqlConnection();
      conn.Open();

          using (SqlCommand comm = new SqlCommand(StrQuery, conn))
          {
              comm.ExecuteNonQuery();
          }
      conn.Close();

  }

また、特定のシナリオによっては、グリッドをデータベースにバインドすることを検討したい場合があります。これにより、手作業の量が大幅に削減されます: http://www.switchonthecode.com/tutorials/csharp-tutorial-binding-a-datagridview-to-a-database

于 2012-05-11T18:20:49.737 に答える
-2
for (int i = 0; i < dataGridView2.Rows.Count; i++)
{
SqlConnection con = new SqlConnection("Data Source=.;Initial Catalog=ID_Proof;Integrated Security=True");
                        SqlCommand cmd = new SqlCommand("INSERT INTO Restaurant (Customer_Name,Quantity,Price,Category,Subcategory,Item,Room_No,Tax,Service_Charge,Service_Tax,Order_Time) values (@customer,@quantity,@price,@category,@subcategory,@item,@roomno,@tax,@servicecharge,@sertax,@ordertime)", con);
                        cmd.Parameters.AddWithValue("@customer",dataGridView2.Rows[i].Cells[0].Value);
                        cmd.Parameters.AddWithValue("@quantity",dataGridView2.Rows[i].Cells[1].Value);
                        cmd.Parameters.AddWithValue("@price",dataGridView2.Rows[i].Cells[2].Value);
                        cmd.Parameters.AddWithValue("@category",dataGridView2.Rows[i].Cells[3].Value);
                        cmd.Parameters.AddWithValue("@subcategory",dataGridView2.Rows[i].Cells[4].Value);
                        cmd.Parameters.AddWithValue("@item",dataGridView2.Rows[i].Cells[5].Value);
                        cmd.Parameters.AddWithValue("@roomno",dataGridView2.Rows[i].Cells[6].Value);
                        cmd.Parameters.AddWithValue("@tax",dataGridView2.Rows[i].Cells[7].Value);
                        cmd.Parameters.AddWithValue("@servicecharge",dataGridView2.Rows[i].Cells[8].Value);
                        cmd.Parameters.AddWithValue("@sertax",dataGridView2.Rows[i].Cells[9].Value);
                        cmd.Parameters.AddWithValue("@ordertime",dataGridView2.Rows[i].Cells[10].Value);
                        con.Open();
                        cmd.ExecuteNonQuery();
                        con.Close();
                        MessageBox.Show("Added successfully!");
于 2012-12-27T11:40:43.127 に答える