从DataGridView读取数据并保存到数据库

时间:2012-10-08 06:49:53

标签: c#

我想将数据从datagrid保存到数据库,我使用了以下代码。

 foreach (DataGridViewRow r in dataGridView_displaycount.Rows)
        {
            SqlCommand cmd = new SqlCommand("insert into StocktransferlocationDetails(date,stocktransferlocation,Itemcode,Count,Description) values(@date,@stocktransferlocation,@Itemcode,@Count,@Description) ", con);

            cmd.Parameters.AddWithValue("@date",System.DateTime.Now);
            cmd.Parameters.AddWithValue("@stocktransferlocation", comboBox_locationfrom.SelectedText+"-"+comboBox_locationto.SelectedText);
            cmd.Parameters.AddWithValue("@Itemcode", r.Cells[1].Value.ToString());
            cmd.Parameters.AddWithValue("@Count", r.Cells[2].Value.ToString());
            cmd.Parameters.AddWithValue("@Description", r.Cells[3].Value.ToString());
            cmd.ExecuteNonQuery();
        }

这里我的问题是datagrid包含最后一个空行。所以我写了数据,当涉及到空行时,它会抛出一个错误。

4 个答案:

答案 0 :(得分:2)

为什么在这里使用 foreach 循环?

使用 for 循环,如:

for(int i=0; i<dataGridView_displaycount.Rows.Count-1; i++)
{
   //Your code
}

这应该是解决问题的简单解决方案,而不是任何其他代码更改。

更新:将gridview数据添加到数据库:

for(int i=0; i< dataGridView_displaycount.Rows.Count-1;i++)
 {
    Strquery= @"Insert into StocktransferlocationDetails(date,stocktransferlocation,....) values (" 
                + System.DateTime.Now +", "+ comboBox_locationfrom.SelectedText+"-"+comboBox_locationto.SelectedText +"," 
                + dataGridView_displaycount.Rows[i].Cells[1].Value +".......);";
    cmd.CommandText = Strquery;
    cmd.ExecuteNonQuery();
 }

答案 1 :(得分:0)

你可以使用像这样:

For(int row=0;row<datagridview.rows.count;row++)

{
//Do Work
}

答案 2 :(得分:0)

尝试检查空值,如下面的代码所示:

foreach (DataGridViewRow r in dataGridView_displaycount.Rows)
{
    SqlCommand cmd = new SqlCommand("insert into StocktransferlocationDetails(date,stocktransferlocation,Itemcode,Count,Description) values(@date,@stocktransferlocation,@Itemcode,@Count,@Description) ", con);

    cmd.Parameters.AddWithValue("@date", System.DateTime.Now);
    cmd.Parameters.AddWithValue("@stocktransferlocation", comboBox_locationfrom.SelectedText + "-" + comboBox_locationto.SelectedText);

    if (r.Cells[1] != null && r.Cells[1].Value != null)
        cmd.Parameters.AddWithValue("@Itemcode", r.Cells[1].Value.ToString());
    if (r.Cells[2] != null && r.Cells[2].Value != null)
        cmd.Parameters.AddWithValue("@Count", r.Cells[2].Value.ToString());
    if (r.Cells[3] != null && r.Cells[3].Value != null)
        cmd.Parameters.AddWithValue("@Description", r.Cells[3].Value.ToString());

    cmd.ExecuteNonQuery();
}

答案 3 :(得分:0)

您可以尝试最后一行:

cmd.Parameters.AddWithValue("@Description", r.Cells[3].Value ?? DBNull.Value);