新书推介:《语义网技术体系》
作者:瞿裕忠,胡伟,程龚
   XML论坛     W3CHINA.ORG讨论区     计算机科学论坛     SOAChina论坛     Blog     开放翻译计划     新浪微博  
 
  • 首页
  • 登录
  • 注册
  • 软件下载
  • 资料下载
  • 核心成员
  • 帮助
  •   Add to Google

    >> 本版讨论.NET,C#,ASP,VB技术
    [返回] 中文XML论坛 - 专业的XML技术讨论区计算机技术与应用『 Dot NET,C#,ASP,VB 』 → c#动态创建存储过程中,提示go 附近有语法错误解决方案 查看新帖用户列表

      发表一个新主题  发表一个新投票  回复主题  (订阅本版) 您是本帖的第 6999 个阅读者浏览上一篇主题  刷新本主题   树形显示贴子 浏览下一篇主题
     * 贴子主题: c#动态创建存储过程中,提示go 附近有语法错误解决方案 举报  打印  推荐  IE收藏夹 
       本主题类别:     
     卷积内核 帅哥哟,离线,有人找我吗?
      
      
      威望:8
      头衔:总统
      等级:博士二年级(版主)
      文章:3942
      积分:27590
      门派:XML.ORG.CN
      注册:2004/7/21

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给卷积内核发送一个短消息 把卷积内核加入好友 查看卷积内核的个人资料 搜索卷积内核在『 Dot NET,C#,ASP,VB 』的所有贴子 访问卷积内核的主页 引用回复这个贴子 回复这个贴子 查看卷积内核的博客楼主
    发贴心情 c#动态创建存储过程中,提示go 附近有语法错误解决方案

    public int CreateDB_KillProc_proc()
    2         {
    3             int result = 0;
    4             string SqlStr = "";
    5             //组合Sql语句
    6             SqlStr += @"USE [RadarDataBase]
    7                     GO
    8                     SET ANSI_NULLS ON
    9                     GO
    10                     SET QUOTED_IDENTIFIER ON
    11                     GO
    12                     create proc [dbo].[P_KillConnections]
    13                     @dbname varchar(200)
    14                     as
    15                     declare @sql nvarchar(500)
    16                     declare @spid nvarchar(20)
    17                     declare #tb cursor for
    18                     select spid=cast(spid as varchar(20)) from master..sysprocesses where dbid=db_id(@dbname)
    19                     open #tb
    20                     fetch next from #tb into @spid
    21                     while @@fetch_status=0
    22                     begin
    23                     exec('kill '+@spid)
    24                     fetch next from #tb into @spid
    25                     end close #tb deallocate #tb ";
    26                    
    27             //执行Sql语句
    28             try
    29             {
    30                 result = DbHelperSQL.ExecuteSql(SqlStr);
    31             }
    32             catch (Exception e)
    33             {
    34                 ErrStr = e.Message;
    35                 return -2;
    36             }
    37             return result;
    38         }

    但执行过程中出现错误

    以下是我在查询分析器中能正常使用的脚本代码。
      

    1 USE [RadarDataBase]
    2                     GO
    3                     SET ANSI_NULLS ON
    4                     GO
    5                     SET QUOTED_IDENTIFIER ON
    6                     GO
    7                     create proc [dbo].[P_KillConnections]
    8                     @dbname varchar(200)
    9                     as
    10                     declare @sql nvarchar(500)
    11                     declare @spid nvarchar(20)
    12                     declare #tb cursor for
    13                     select spid=cast(spid as varchar(20)) from master..sysprocesses where dbid=db_id(@dbname)
    14                     open #tb
    15                     fetch next from #tb into @spid
    16                     while @@fetch_status=0
    17                     begin
    18                     exec('kill '+@spid)
    19                     fetch next from #tb into @spid
    20                     end close #tb deallocate #tb ";


    查询分析器是sql客户端,它可以识别go用来分批提交,但go不是sql语句,sql服务器不能识别所以不能用在程序中。

    所以将带有GO的语句分成多条sql语句,执行多条SQL语句,实现数据库事务,代码如下:

    1  public int CreateDB_KillProc_proc()
    2         {
    3             List<string> strSqls = new List<string>();
    4             int result = 0;
    5             string SqlStr = "";
    6             //组合Sql语句
    7             SqlStr += "USE [RadarDataBase]";
    8             strSqls.Add(SqlStr);
    9             SqlStr = "SET ANSI_NULLS ON ";
    10             strSqls.Add(SqlStr);
    11             SqlStr = "SET QUOTED_IDENTIFIER ON  ";
    12             strSqls.Add(SqlStr);
    13             SqlStr = @"create proc [dbo].[P_KillConnections]
    14                     @dbname varchar(200)
    15                     as
    16                     declare @sql nvarchar(500)
    17                     declare @spid nvarchar(20)
    18                     declare #tb cursor for
    19                     select spid=cast(spid as varchar(20)) from master..sysprocesses where dbid=db_id(@dbname)
    20                     open #tb
    21                     fetch next from #tb into @spid
    22                     while @@fetch_status=0
    23                     begin
    24                     exec('kill '+@spid)
    25                     fetch next from #tb into @spid
    26                     end close #tb deallocate #tb";
    27             strSqls.Add(SqlStr);
    28             //执行Sql语句
    29             try
    30             {
    31                 result = DbHelperSQL.ExecuteSqlTran(strSqls);//这个函数功能是执行多条sql语句实现数据库事务
    32             }
    33             catch (Exception e)
    34             {
    35                 ErrStr = e.Message;
    36                 return -2;
    37             }
    38             return result;
    39         }
    40


       收藏   分享  
    顶(0)
      




    ----------------------------------------------
    事业是国家的,荣誉是单位的,成绩是领导的,工资是老婆的,财产是孩子的,错误是自己的。

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2010/6/14 14:31:00
     
     GoogleAdSense
      
      
      等级:大一新生
      文章:1
      积分:50
      门派:无门无派
      院校:未填写
      注册:2007-01-01
    给Google AdSense发送一个短消息 把Google AdSense加入好友 查看Google AdSense的个人资料 搜索Google AdSense在『 Dot NET,C#,ASP,VB 』的所有贴子 访问Google AdSense的主页 引用回复这个贴子 回复这个贴子 查看Google AdSense的博客广告
    2024/4/29 17:20:59

    本主题贴数1,分页: [1]

    管理选项修改tag | 锁定 | 解锁 | 提升 | 删除 | 移动 | 固顶 | 总固顶 | 奖励 | 惩罚 | 发布公告
    W3C Contributing Supporter! W 3 C h i n a ( since 2003 ) 旗 下 站 点
    苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
    78.125ms