简体   繁体   English

将datagridview数据插入数据库

[英]Insert datagridview data into database

I have a form with a blank datagridview. 我有一个带有空白datagridview的表单。 What's the most effective way to get the mulptiple lines of data from the datagridview saved into the database? 从datagridview中获取多行数据保存到数据库中的最有效方法是什么? I've searched for tutorials and have been recommended SqlBulkCopy and a few other solutions. 我已经搜索了教程,并推荐了SqlBulkCopy和其他一些解决方案。 The aim is to use it to create invoices, so the names of the tables would need to be unique. 目的是使用它来创建发票,因此表名必须唯一。 I'm using SqlCe and C# 2010. 我正在使用SqlCe和C#2010。

I refer to each cell specifically (using index), paramaterize that value and use it in an INSERT statement. 我专门引用每个单元格(使用索引),对该值进行参数化,然后在INSERT语句中使用它。

See here: 看这里:

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);
}

Note: I used a converter so the code may not have translated the best. 注意:我使用了转换器,因此代码可能未翻译最佳。

Also note, I do not use this to insert 100's or thousands of rows of data, only 3-4 at a time. 另请注意,我不会用它一次插入100或数千行数据,一次只能插入3-4行。 If there is a more efficient approach, I am not sure of it, however you asked me to post how I would do it. 如果有更有效的方法,我不确定,但是您要求我发布如何执行此方法。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM