c# - 如何从 gridview 将多条记录添加到 SQL Server 表中?

标签 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();
        }
    }
}

但是我得到一个错误:

Additional information: The variable name '@record' has already been declared. Variable names must be unique within a query batch or stored procedure.

有什么帮助吗?

提前致谢。

最佳答案

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

方法一

在循环内对您的参数调用 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();
}

方法二

只在循环内添加值,但在循环外声明一次参数。

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

关于c# - 如何从 gridview 将多条记录添加到 SQL Server 表中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41194609/

相关文章:

c# - 为什么 System.Text.RegularExpressions.Group 没有 Name 属性?

c# - 覆盖静态方法

c# - 工作 C# 示例 : Writing & Reading NTFS Alternate Data Stream Under Win7 64 bit

sql-server - SQL Server row_number() 按查询分区

mysql - 如何将十六进制转换为 varchar(datetime)?

sql - SELECT 聚合和更新 - SQL Server

c# - 使用 .net 应用程序更改启动启用/禁用选项

c# - .Net Toolstrip/MenuStrip 焦点问题

c# - 如何将WPF英寸单位转换为Winforms像素,反之亦然?

c# - System.reactive跨线程操作荒谬