使用存储过程在数据库中插入列表记录
我有一个使用存储过程插入 SQL Server 数据库的记录列表。目前我就是这样做的,但是有更好的方法吗?
我在应用程序的高峰时段每秒插入 100-200 行。存储过程仅获取值并插入新行
public void InsertRecords(List<stRecord> records)
{
foreach (var item in records)
{
if (CheckforDuplicateRecord(item) == false)
{
using (con = new SqlConnection(connectionString))
{
con.Open();
SqlCommand cmd = new SqlCommand(StoredProcedures.Service_Insert_record.ToString(), con);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@item1", SqlDbType.NChar);
cmd.Parameters.Add("@item2", SqlDbType.NChar);
cmd.Parameters[0].Value = item.localUsername;
cmd.Parameters[1].Value = item.BetfairUsername;
try
{
cmd.ExecuteNonQuery();
}
catch (Exception exp)
{
throw exp;
}
}
}
}
}
I have a list of records inserting into a SQL Server database using a stored procedure. Currently I am doing it this way but is there any better way?
I am inserting 100-200 rows per/sec on peak hours of my app. The stored procedure only gets the values and inserts the new row
public void InsertRecords(List<stRecord> records)
{
foreach (var item in records)
{
if (CheckforDuplicateRecord(item) == false)
{
using (con = new SqlConnection(connectionString))
{
con.Open();
SqlCommand cmd = new SqlCommand(StoredProcedures.Service_Insert_record.ToString(), con);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@item1", SqlDbType.NChar);
cmd.Parameters.Add("@item2", SqlDbType.NChar);
cmd.Parameters[0].Value = item.localUsername;
cmd.Parameters[1].Value = item.BetfairUsername;
try
{
cmd.ExecuteNonQuery();
}
catch (Exception exp)
{
throw exp;
}
}
}
}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
这正是表值参数的用途 - 您可以一次性传递列表。
在 SQL Server 中:
现在在 C# 中:
This is exactly what table-valued parameters are for - you can pass your list in one shot.
In SQL Server:
Now in C#:
您可以做的一件显而易见的事情是:在方法开始时仅创建 一次
SqlCommand
- 一遍又一遍地创建它没有意义!One obvious thing you could do: create the
SqlCommand
only once at the beginning of the method - no point in creating it over and over and over again!