[英]How to add an Insert row to a GridView which is databound to a SQL server table?
[英]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.