簡體   English   中英

如何從gridview向SQL Server表添加多個記錄?

[英]How to add multiple records into a SQL Server table from a gridview?

我得到了一個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();
        }
    }
}

但我得到一個錯誤:

附加信息:變量名“ @record”已經聲明。 變量名稱在查詢批處理或存儲過程中必須唯一。

有什么幫助嗎?

提前致謝。

您的問題是您繼續在循環內定義參數,並且顯然同一命令無法多次定義同一參數。 解決問題的兩種方法。

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

方法二

僅在循環內添加值,但在循環外聲明一次參數。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM