我有一个带有空白datagridview的表单。从datagridview中获取多条数据的最有效方法是什么?我已经搜索过教程,并且已经推荐了SqlBulkCopy和其他一些解决方案。目的是使用它来创建发票,因此表的名称必须是唯一的。我使用的是SqlCe和C#2010。
答案 0 :(得分:0)
我具体指代每个单元格(使用索引),对该值进行参数化,并在INSERT
语句中使用它。
见这里:
SqlCommand cmd = new SqlCommand();
//Basic SQL INSERT statement
cmd.CommandText += " INSERT INTO ELECT_SALARY_DFRL (ELECT_XREF_SEQ_ID, EMPL_SALARY_DFRL_AMT, EMPL_SALARY_DFRL_FREQ_CD, ";
cmd.CommandText += " FUND_SEQ_ID, ELECT_SALARY_DFRL_FUND_PCT_RT, ELECT_SALARY_DFRL_ELECT_DT, BEG_DT, END_DT)";
cmd.CommandText += " VALUES (@SeqID, @DefAmt, @Freq, @FundID, @FundPct, @Today, @begDt, @EndDT); ";
//Parameters for sql insert, from DGV.
cmd.Parameters.Add("@DefAmt", SqlDbType.VarChar);
cmd.Parameters.Add("@Freq", SqlDbType.VarChar);
cmd.Parameters.Add("@FundID", SqlDbType.Int);
cmd.Parameters.Add("@SeqID", SqlDbType.Int);
cmd.Parameters.Add("@FundPct", SqlDbType.VarChar);
cmd.Parameters.AddWithValue("@Today", System.DateTime.Now());
cmd.Parameters.AddWithValue("@begDt", "19000101");
cmd.Parameters.AddWithValue("@EndDT", "24000101");
conn.Open();
cmd.Connection = conn;
try {
//Loop through entire DataGridView
for (int i = 0; i <= SalaryDGV.Rows.Count - 1; i++) {
//If row is empty, exit For Next block.
if (BonusDGV.Rows(i).Cells(0).Value == null) {
break;
}
//Adds value to parameters from data grid view.
cmd.Parameters("@DefAmt").Value = SalaryDGV.Rows(i).Cells(0).Value;
cmd.Parameters("@Freq").Value = SalaryDGV.Rows(i).Cells(1).Value;
cmd.Parameters("@FundID").Value = Convert.ToInt32(SalaryDGV.Rows(i).Cells(2).Value);
cmd.Parameters("@SeqID").Value = SalaryDGV.Rows(i).Cells(3).Value;
cmd.Parameters("@FundPct").Value = SalaryDGV.Rows(i).Cells(4).Value;
cmd.ExecuteNonQuery();
}
} catch (Exception ex) {
MessageBox.Show("Error adding the Salary Deferral " + ex.Message);
}
注意:我使用了转换器,因此代码可能没有最好的转换。
另请注意,我不会使用它来插入100行或数千行数据,一次只能插入3-4行。如果有一种更有效的方法,我不确定,但你要我发布我将如何做。