3

参考下面的代码:

void loadInstallMentPattern(System.Collections.ArrayList pattern)
    {
        dataGridView1.Rows.Clear();

        for (int i = 0; i < pattern.Count; i++)
        {
            int c = dataGridView1.Rows.Add();
            dataGridView1.Rows[c].Cells["gvcSNo"].Value = (i + 1).ToString();
            dataGridView1.Rows[c].Cells["gvcDueDate"].Value = ((InstallmentPatternStruct)pattern[i]).DueDate;
            dataGridView1.Rows[c].Cells["gvcAmount"].Value = ((InstallmentPatternStruct)pattern[i]).PrincipalAmt;
            dataGridView1.Rows[c].Cells["gvcInterestAmt"].Value = ((InstallmentPatternStruct)pattern[i]).InterestAmt;

            dataGridView1.Rows[c].Cells["gvcDebitAmt"].Value = ((InstallmentPatternStruct)pattern[i]).DebitPrincipalAmt;
            dataGridView1.Rows[c].Cells["gvcEMI"].Value = ((InstallmentPatternStruct)pattern[i]).EMI;
        }
    }

我务实地向 DataGridView 添加了几行,这些行需要进一步发送到数据库以进行持久性。

目前我通过从网格中读取每一行然后将其发送到数据库来发送数据。这意味着如果我在 DataGridView 中有 500 行,那么我将不得不触发 500 个插入查询。

我想知道在 DataGRidView 没有数据绑定的情况下,是否有任何其他方式可以将数据发送到 db(批量)。

我希望我能够清楚地解释我的问题。任何帮助将不胜感激。

4

2 回答 2

1

可能有一种方法可以更接近 .NET 对象让您这样做的方式,但作为后备,总有一种方法,

INSERT INTO Table ( ColumnA, ColumnB ) 
VALUES ( ValueA1, ValueB1 ), ( ValueB2, ValueB2 ), ... ( ValueAn, ValueBn)
于 2013-03-02T05:19:59.957 回答
0

好吧,我找到了解决问题的方法。我不知道为什么以前没有想到它,但迟早会来的!

我从填充 DataGridView 的列表中手动创建了一个 DataTable。然后我使用 SQLBulkCopy 将整个数据一次性发送到服务器。

这是我所做的代码:

  public static void saveAllotmentLeaseToDb(int allotmentId, System.Collections.Generic.List<LeasePatternStruct> arr)
    {

        DataTable dt = new DataTable();
        dt.Columns.Add("AllotmentID",Type.GetType("System.Int32"));
        dt.Columns.Add("LeaseNumber", Type.GetType( "System.Int32"));
        dt.Columns.Add("DueDate",Type.GetType("System.DateTime"));
        dt.Columns.Add("Amount",Type.GetType("System.Double"));
        dt.Columns.Add("Remarks",Type.GetType("System.String"));
        dt.Columns.Add("LeaseIncrementID",Type.GetType("System.Int32"));
        dt.Columns.Add("isPaid",Type.GetType("System.Boolean"));
        dt.Columns.Add("PaymentID", Type.GetType("System.Int32"));
        for (int i = 0; i < arr.Count; i++)
        {
            DataRow dr = dt.NewRow();
            dr["AllotmentID"] = allotmentId;
            dr["LeaseNumber"] = (i + 1).ToString();
            dr["DueDate"] = arr[i].DueDate;
            dr["Amount"] = arr[i].Amount;
            dr["Remarks"] = arr[i].Remarks;
            dr["LeaseIncrementID"] = DBNull.Value; ;
            dr["isPaid"] = false; ;
            dr["PaymentID"] = DBNull.Value; ;
            dt.Rows.Add(dr);

        }
        using (SqlConnection connection = dataHandler.getConnection())
        {
            connection.Open();

            //Open bulkcopy connection.
            using (SqlBulkCopy bulkcopy = new SqlBulkCopy(connection))
            {
                //Set destination table name
                //to table previously created.
                bulkcopy.DestinationTableName = "LottaryAllotment_Lease_Details";


                    bulkcopy.WriteToServer(dt);


                connection.Close();
            }

        }

    }
于 2013-03-02T11:29:43.363 回答