分析器中存储过程错误

时间:2011-09-13 15:21:37

标签: c# .net sql-server tsql

我正在运行一个带有objectdatasource和gridview的程序。我的Update方法看起来好像正在通过程序。但是当它到达DB时,会出现一些语法错误。

这是存储过程

USE [starch]
GO
/****** Object:  StoredProcedure [dbo].[Starch_Update_KPCodes]    Script Date:       09/13/2011 11:02:1 ******/
SET ANSI_NULLS ON
 GO
SET QUOTED_IDENTIFIER ON
GO

ALTER procedure [dbo].[Stored_proc_name]
(
@bookcode as varchar(15),
@PC as varchar(10),
@EReader as varchar(10),
@Tablet as varchar(10),
@Mobile as varchar(10)
)
AS
Begin
Update storedproc
SET 
    Valid_Ans_Nbr = @PC 
where 
    kp_Column=82 and BookCode = @bookcode 
Update 
    Valid_Answers
SET
    Valid_Ans_Nbr = @EReader 
where 
    kp_Column=83 and BookCode = @bookcode


Update
    Valid_Answers
SET 
    Valid_Ans_Nbr = @Tablet 
where 
    kp_Column=84 and BookCode = @bookcode

Update
    alid_Answers
Set
    Valid_Ans_Nbr = @Mobile 
where 
    kp_Column=85 and BookCode = @bookcode

END

接下来是SQL profiler中传递给数据库的内容

exec sp_executesql N'Starch_Update_KPCodes',
                   N'@bookcode nvarchar(8),
                   @PC nvarchar(1),
                   @EReader nvarchar(1),
                   @Tablet nvarchar(1),
                   @Mobile nvarchar(1)',
                   @bookcode=N'A0027232',
                   @PC=N'1',
                   @EReader=N'1',
                   @Tablet=N'1',
                   @Mobile=N'1' 

我认为正在进行的部分原因是我已经删除并重新创建了几次存储过程。而这一行

N'@bookcode nvarchar(8),@PC nvarchar(1),@EReader nvarchar(1),
     @Tablet nvarchar(1),@Mobile nvarchar(1)'

可能与存储过程的某些缓存版本有关。

我已经检查了我的objectdatasource的更新事件,以确保它具有正确的参数。

如何摆脱传递给存储过程的额外文本?

2 个答案:

答案 0 :(得分:2)

我不确定我的问题是什么,但......

此部分定义sp_executesql的参数。

               N'@bookcode nvarchar(8),
               @PC nvarchar(1),
               @EReader nvarchar(1),
               @Tablet nvarchar(1),
               @Mobile nvarchar(1)',

这会为参数指定值。

               @bookcode=N'A0027232',
               @PC=N'1',
               @EReader=N'1',
               @Tablet=N'1',
               @Mobile=N'1'    

据我所知,其中没有额外文字

答案 1 :(得分:2)

您可能需要将命令类型设置为存储过程。

您现有的代码只会尝试执行裸声明Starch_Update_KPCodes,并且您传入的参数在该声明的任何位置都未使用。

要通过sp_executesql执行此操作,语句必须为

exec sp_executesql N'EXEC Starch_Update_KPCodes 
                             @bookcode=@bookcode, 
                             @PC=@PC, 
                             @EReader=@EReader, 
                             @Tablet=@Tablet, 
                             @Mobile=@Mobile',
                   N'@bookcode nvarchar(8),
                   @PC nvarchar(1),
                   @EReader nvarchar(1),
                   @Tablet nvarchar(1),
                   @Mobile nvarchar(1)',
                   @bookcode=N'A0027232',
                   @PC=N'1',
                   @EReader=N'1',
                   @Tablet=N'1',
                   @Mobile=N'1' 

与直接调用存储过程相比,这有点愚蠢!