如何从gridview中将多个记录添加到SQL Server表中?

时间:2016-12-17 01:42:44

标签: c# sql-server winforms

我有一个csv文件,我将它插入gridview,然后显示它。之后,我需要将它存储到数据库中,来自gridview的所有记录。

所以在按钮上单击我使用以下代码:

using (SqlConnection scn = new SqlConnection("Data Source=(local); Database='WaselProject'; Integrated Security = yes;"))
{
    scn.Open();
    string query = "INSERT INTO Wasel_Card (RECORD, CARD_ID, FULL_NAME, SERVICE_ID, PROC_COUNT, READ_COUNT) VALUES (@record, @cardid, @fullname, @serviceid, @proccount, @readcount)";

    using (SqlCommand scm = new SqlCommand(query, scn))
    {
        for (int i = 0; i < dataGridView1.Rows.Count; i++)
        {
            scm.Parameters.AddWithValue("@record", dataGridView1.Rows[i].Cells["Record"].Value.ToString());
            scm.Parameters.AddWithValue("@cardid", dataGridView1.Rows[i].Cells["CARD_ID"].Value.ToString());
            scm.Parameters.AddWithValue("@fullname", dataGridView1.Rows[i].Cells["FULL_NAME"].Value.ToString());
            scm.Parameters.AddWithValue("@serviceid", dataGridView1.Rows[i].Cells["SERVICE_ID"].Value.ToString());
            scm.Parameters.AddWithValue("@proccount", dataGridView1.Rows[i].Cells["PROC_COUNT"].Value.ToString());
            scm.Parameters.AddWithValue("@readcount", dataGridView1.Rows[i].Cells["READ_COUNT"].Value.ToString());

            scm.ExecuteNonQuery();
        }
    }
}

但是我收到了错误:

  

附加信息:变量名称&#39; @ record&#39;已经宣布。变量名在查询批处理或存储过程中必须是唯一的。

任何帮助?

提前致谢。

1 个答案:

答案 0 :(得分:3)

您的问题是您继续在循环内定义参数,显然同一命令不能多次定义相同的参数。解决问题的两种方法。

方法1

在循环中调用Clear()参数。

for (int i = 0; i < dataGridView1.Rows.Count; i++)
{
    scm.Parameters.AddWithValue("@record", dataGridView1.Rows[i].Cells["Record"].Value.ToString());
    scm.Parameters.AddWithValue("@cardid", dataGridView1.Rows[i].Cells["CARD_ID"].Value.ToString());
    scm.Parameters.AddWithValue("@fullname", dataGridView1.Rows[i].Cells["FULL_NAME"].Value.ToString());
    scm.Parameters.AddWithValue("@serviceid", dataGridView1.Rows[i].Cells["SERVICE_ID"].Value.ToString());
    scm.Parameters.AddWithValue("@proccount", dataGridView1.Rows[i].Cells["PROC_COUNT"].Value.ToString());
    scm.Parameters.AddWithValue("@readcount", dataGridView1.Rows[i].Cells["READ_COUNT"].Value.ToString());
    scm.ExecuteNonQuery();
    scm.Parameters.Clear();
}

方法2

仅在循环中添加值,但在循环外部声明参数。

// Define here just once
var paramRecord = scm.Parameters.Add("@record", System.Data.SqlDbType.Variant ); // There are 6 Add methods in total. 5 of them return SqlParameter so you can use any of those 5
// the other parameters
for (int i = 0; i < dataGridView1.Rows.Count; i++)
{
    paramRecord.Value = dataGridView1.Rows[i].Cells["Record"].Value.ToString());
    // other parameter values here
    scm.ExecuteNonQuery();
}