我正在运行一个带有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的更新事件,以确保它具有正确的参数。
如何摆脱传递给存储过程的额外文本?
答案 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'
与直接调用存储过程相比,这有点愚蠢!