c#动态创建存储过程中,提示'go' 附近有语法错误解决方案
2010-09-01 18:14
513 查看
转自:/article/5399201.html
1 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
1 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
相关文章推荐
- c#动态创建存储过程中,提示'go' 附近有语法错误解决方案
- c#动态创建存储过程中,提示'go' 附近有语法错误解决方案
- MySQL在创建存储过程的时候,语法正确却提示You have an error in your SQL syntax
- C#开发学习笔记:C#通过存储过程创建数据表
- vs2010打不开vs2017的.sln文件,出现错误提示 “选择的文件是解决方案文件 但是用此应用程序的较新版本创建的,无法打开”
- 使用C#创建SQL Server的存储过程(Visual Studio 2005 + SQL Server 2005)
- C# 读取app.config配置文件 节点键值,提示 "配置系统未能初始化" 错误的解决方案
- 使用C#创建SQL Server的存储过程
- mybatis 动态SQL '@P0' 附近有语法错误
- C#调用存储过程的方法,和简单存储过程创建的方法实例。【转载】为入门的朋友引路,大家互相学习。
- C# 读取app.config配置文件 节点键值,提示 "配置系统未能初始化" 错误的解决方案
- 动态创建SQL Server数据库、表、存储过程等架构信息
- 带参数的存储过程动态创建一个视图及调用方法[表不固定,作为参数]
- Mysql Workbench 创建函数总是提示语法错误
- ORACLE 存储过程动态创建视图
- 两个存储过程:一、使用存储过程动态创建数据表。二、插入新记录。
- 执行oracle中的job报错:ORA-12011:无法执行作业1存储过程执行DDL语句提示ORA-01031错误:权限不足
- C#与SQL Server存储过程之一(创建):使用C#创建SQL Server的存储过程
- Sql Server 编写多条件查询语句的存储过程--包含语法错误的存储过程与正确存储过程
- Oracle中创建存储过程基本语法