1

我正在使用 datagridview 并向其添加列...并相应地使用文本框将数据添加到 datagridview ..这是客户想要购买的产品列表..第一列是CustCode, ItemCode, Date..Quantity这些是 4 列我添加了很多行..

假设我在 datagridview 中插入了 5 行 ....我现在想将 datagridview 中的所有数据添加到 SQL Server 2008 数据库中 ....有人可以编写整个代码吗?我真的很困惑,我的这段代码似乎不起作用......给出了一个错误..null参数

SqlConnection con = new System.Data.SqlClient.SqlConnection();
con = new System.Data.SqlClient.SqlConnection();
con.ConnectionString = "Data Source=rex;Initial Catalog=Project DB 1;Integrated Security=True";

con.Open();
SqlDataAdapter da = new SqlDataAdapter();

for (int i = 0; i <= dataGridView1.Rows.Count - 1; i++)
{
    String insertData = "INSERT INTO SalesTable(CustCode,ItemCode,Date,Quantity) " + 
                        "VALUES (@CustCode,@ItemCode,@Date,@Quantity)";

    SqlCommand cmd = new SqlCommand(insertData, con);
    cmd.Parameters.AddWithValue("@CustCode", dataGridView1.Rows[i].Cells[0].Value);
    cmd.Parameters.AddWithValue("@ItemCode", dataGridView1.Rows[i].Cells[1].Value);
    cmd.Parameters.AddWithValue("@Date", dataGridView1.Rows[i].Cells[2].Value);
    cmd.Parameters.AddWithValue("@Quantity", dataGridView1.Rows[i].Cells[3].Value);

    da.InsertCommand = cmd;
    cmd.ExecuteNonQuery();
}
con.Close();
4

1 回答 1

1

如果我正确理解您的问题,那么您的一个或多个网格单元格不包含值,因此您得到一个空参数 - 要在数据库中插入空值,您需要传递(作为参数的值)DBNull.Value

所以你的代码可以重写为

using(SqlConnection con = new System.Data.SqlClient.SqlConnection("Data Source=rex;Initial Catalog=Project DB 1;Integrated Security=True"))
{
    con.Open();
    foreach (DataGridViewRow row in dataGridView1.Rows)
    {
        if(!row.IsNewRow)
        {
            String insertData = "INSERT INTO SalesTable(CustCode,ItemCode,Date,Quantity) " + 
                                "VALUES (@CustCode,@ItemCode,@Date,@Quantity)";

            SqlCommand cmd = new SqlCommand(insertData, con);
            cmd.Parameters.AddWithValue("@CustCode", row.Cells[0].Value ?? DbNull.Value);
            cmd.Parameters.AddWithValue("@ItemCode", row.Cells[1].Value ?? DBNull.Value);
            cmd.Parameters.AddWithValue("@Date", row.Cells[2].Value ?? DBNull.Value);
            cmd.Parameters.AddWithValue("@Quantity", row.Cells[3].Value ?? DBNUll.Value);
            cmd.ExecuteNonQuery();
        }
    }
}

我使用C# Null Coalescing 运算符来测试您的单元格之一的值是否为空。
我还删除了无用的 DataAdapter 并修复了连接的创建、初始化和处置

另请参见DataGridViewRow 中的IsNewRow 属性

于 2013-05-12T09:09:24.750 回答