.net中执行 带有逻辑判断的多表插入事物Sql语句

aDever 2013-12-24 11:14:15
5张表做事物插入处理,问题在于主表需要判断一下是否存在才能做处理
ArrayList list =new ArrayList()
list.Add(" if exists(select * from UserDetails where userid='zhanghao01') ");
list.Add(" Begin ");
list.Add(" insert UserDetails ...");
list.Add(" insert SalesDetails ...");
list.Add(" insert ProjectDetails...");
...
list.Add(" END ");

现在这样执行报错。原因是 第2和最后一个list不是有效的SQL。分开用strSql+=累加起来放进ArrayList,事务指执行了第一条的insert其他的不执行了。

求解决方案
...全文
153 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
唐诗三百首 2013-12-27
  • 打赏
  • 举报
回复
MSSQL中执行事务的语句是begin transaction,commit transaction. 非begin,end喔.

begin transaction
[事务处理过程]
commit transaction
唐诗三百首 2013-12-27
  • 打赏
  • 举报
回复
于vs2010测试如下代码运行正常,LZ可借助SQL Profiler工具获取后台执行的SQL语句.

SqlConnection cn = new SqlConnection("[数据库连接串]");
cn.Open();

ArrayList list = new ArrayList();
list.Add(" if exists(select * from UserDetails where userid='zhanghao01') ");
list.Add(" Begin ");
list.Add(" insert UserDetails ..."); 
list.Add(" insert SalesDetails ..."); 
list.Add(" insert ProjectDetails...");
list.Add(" END ");

int i;
string tsql;
tsql = "";

for (i = 0; i <= list.Count-1; i++)
 {  tsql = tsql + list[i] + " ";  }

SqlCommand cm;
cm = new SqlCommand(tsql, cn);
cm.ExecuteNonQuery();
铁歌 2013-12-27
  • 打赏
  • 举报
回复
可能arrlist存在转义符导致解析不了, 1)把SQL写成存储过程然后使用ado.net调用 2)直接把SQL写到ADO.NET的SQLCOMMAND对象中,这个对象可以支持多行语句的执行,多行 语句只需通过stringbuilder或string赋值即可
發糞塗牆 2013-12-24
  • 打赏
  • 举报
回复
获取实际的SQL文本再分析
LongRui888 2013-12-24
  • 打赏
  • 举报
回复
你用sql profiler 跟踪一下,看看到底是哪儿报错了

22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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