需要一次插入多条数据,什么解决方案好?

loveniki 2009-07-17 09:17:36
这些数据互相之间是没有什么规律联系的!
一般十几条,几十条一起插入,我想到的是放到数组里面,通过存储过程插入,但是我从来没有试过存储过程的参数是数组的情况,
请问,存储过程的参数可以是数组吗?怎么用?
抑或有更好的解决方案?
...全文
232 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
weixiaolong 2009-07-17
  • 打赏
  • 举报
回复
事物
chen_ya_ping 2009-07-17
  • 打赏
  • 举报
回复
用事务
沉序员 2009-07-17
  • 打赏
  • 举报
回复
事務喲,一定要。危險
zjybushiren88888 2009-07-17
  • 打赏
  • 举报
回复
I.ADO.NET事务完成海量数据

http://www.diybl.com/course/4_webprogram/asp.net/netjs/20090316/161813.html

II.
 INSERT INTO 表 SELECT 1, 'aaa' UNION SELECT  2, 'bbb'  UNION SELECT 3, 'ccc'   


测试
结果: 插入1000条数据比循环调用1000次insert或1000条insert语句简单叠加一次调用要高效得多union all 也可以
注意: 1表不能有主键或者主键是数据库默认的(sql用自动递增列,oracle用序列)
2组合sql语句时只能直接用字符串连接,不能用参数化sql语句的写法(就是在组合的sql中用@parm做占位符,再给Command对象添加Parameter)
gdjlc 2009-07-17
  • 打赏
  • 举报
回复
参数也可以是数组的。下面是我用的:


/// <summary>
/// 执行多条sql 2009/6/10
/// </summary>
/// <param name="SqlStrings">sql语句</param>
/// <param name="param">数组参数</param>
/// <returns>count</returns>
public int ExecuteSQL(String[] SqlStrings, SqlParameter[][] param)
{
int count = -1;
Open();
SqlCommand cmd = new SqlCommand();
SqlTransaction trans = Connection.BeginTransaction();
cmd.Connection = Connection;
cmd.Transaction = trans;
try
{
int i = 0;
foreach (String str in SqlStrings)
{
cmd.CommandText = str;
cmd.Parameters.AddRange(param[i]);
count = cmd.ExecuteNonQuery();
cmd.Parameters.Clear();
i++;
}
trans.Commit();
}
catch
{
trans.Rollback();
count = -1;
}
finally
{
Close();
}
return count;
}





public int DeleteInfoAndComment(ZsInfo M)
{
string sql1 = "DELETE zs_info WHERE InfoId = @InfoId";
string sql2 = "DELETE zs_comment WHERE InfoId = @InfoId";
string sql3 = "DELETE zs_img WHERE InfoId = @InfoId";
string[] sql = { sql1, sql2, sql3 };

DataBase db = new DataBase();

SqlParameter[][] Params = new SqlParameter[3][];

SqlParameter[] Params1 = new SqlParameter[1];
Params1[0] = db.MakeParam("@InfoId", SqlDbType.Int, 4, M.InfoId);

SqlParameter[] Params2 = new SqlParameter[1];
Params2[0] = db.MakeParam("@InfoId", SqlDbType.Int, 4, M.InfoId);

SqlParameter[] Params3 = new SqlParameter[1];
Params3[0] = db.MakeParam("@InfoId", SqlDbType.Int, 4, M.InfoId);

Params[0] = Params1;
Params[1] = Params2;
Params[2] = Params3;

return db.ExecuteSQL(sql, Params);

}
jiangzhe556 2009-07-17
  • 打赏
  • 举报
回复
事务处理
wl_bdqn 2009-07-17
  • 打赏
  • 举报
回复
正规的插入都是一条一条插,用存储过程没有尝试过,但是要保证用事务
wuyq11 2009-07-17
  • 打赏
  • 举报
回复
构建类实例,通过实体对象,传递到数据库操作类,通过事务实现批处理
hanbb1982 2009-07-17
  • 打赏
  • 举报
回复
回滚事务!
yangao 2009-07-17
  • 打赏
  • 举报
回复
可以组合成这样的sql
INSERT INTO A
SELECT 1,'第一','1' UNION ALL
SELECT 2,'第二','1' UNION ALL
SELECT 3,'第三','1'
阿云ivan 2009-07-17
  • 打赏
  • 举报
回复
看你的情况必须要用ado.net的事务处理,以保证多记录插入时同时成功或失败
loveniki 2009-07-17
  • 打赏
  • 举报
回复
补充下:数据库是MSSQL

62,254

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧