请参阅以下代码:
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(批量)。
我希望我能够清楚地解释我的问题。任何帮助将不胜感激。
答案 0 :(得分:1)
可能有一种方法可以让它更接近.NET对象如何让你做到这一点,但总是作为后备,
INSERT INTO Table ( ColumnA, ColumnB )
VALUES ( ValueA1, ValueB1 ), ( ValueB2, ValueB2 ), ... ( ValueAn, ValueBn)
答案 1 :(得分:0)
好吧,我找到了问题的解决方案。我不知道为什么它之前没有出现在我的脑海里,但它迟早会来临!!
我从列表中手动创建了一个DataTable,我正在填充DataGridView。然后我使用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();
}
}
}