将datagridview数据插入数据库

时间:2014-05-28 16:13:10

标签: c# sql database datagridview

我有一个带有空白datagridview的表单。从datagridview中获取多条数据的最有效方法是什么?我已经搜索过教程,并且已经推荐了SqlBulkCopy和其他一些解决方案。目的是使用它来创建发票,因此表的名称必须是唯一的。我使用的是SqlCe和C#2010。

1 个答案:

答案 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行。如果有一种更有效的方法,我不确定,但你要我发布我将如何做。