C# sql中的存储过程在c中的应用#
我在sql中使用了以下存储过程:C# sql中的存储过程在c中的应用#,c#,asp.net,sql,stored-procedures,sql-server-2008-r2,C#,Asp.net,Sql,Stored Procedures,Sql Server 2008 R2,我在sql中使用了以下存储过程: alter procedure [dbo].[usp_Member_Org_OnGoingJobs] ( @idUser varchar(50) ) as begin declare @qry as varchar(max) set @qry='select J.idJob,j.DateAdded,j.OpenedByWho,j.JobAddress ,j.final,j.idOrg,j.note
alter procedure [dbo].[usp_Member_Org_OnGoingJobs]
(
@idUser varchar(50)
)
as
begin
declare @qry as varchar(max)
set @qry='select J.idJob,j.DateAdded,j.OpenedByWho,j.JobAddress ,j.final,j.idOrg,j.note
from Job J
inner join Users U on
U.idOrg=J.idOrg
where U.IdUser='+ @idUser+ '
and ISNULL(j.Final,'')=''
order by idJob'
execute(@qry)
end
GO
此存储过程是在sql中成功形成的
但是,当我试图通过asp.net c#使用它们时,它给了我错误:
Incorrect syntax near the keyword 'order'.
一切似乎都是正确的
请告诉我哪里出了错
编辑:
只需在order by中添加表别名,我想应该可以解决这个问题
orderby J.idJob只要在order by中添加表别名,我想应该可以解决这个问题
order by J.idJob您需要在ISNULL检查前后将单引号加倍
set @qry='select J.idJob,j.DateAdded,j.OpenedByWho,j.JobAddress ,j.final,j.idOrg,j.note
from Job J
inner join Users U on
U.idOrg=J.idOrg
where U.IdUser='+ @idUser+ '
and ISNULL(j.Final,'''')=''''
order by idJob'
您需要在ISNULL检查周围使用双引号
set @qry='select J.idJob,j.DateAdded,j.OpenedByWho,j.JobAddress ,j.final,j.idOrg,j.note
from Job J
inner join Users U on
U.idOrg=J.idOrg
where U.IdUser='+ @idUser+ '
and ISNULL(j.Final,'''')=''''
order by idJob'
您需要像这样放置两次引号以避开引号
和ISNULL(j.Final,'''''')=''''''''''
查看这篇博文你需要像这样引用两次来避开引号
和ISNULL(j.Final,'''''')=''''''''''
查看此博客帖子@Steve sir我添加了调用此存储过程的函数。。。使用它们绑定网格作为旁注,您在存储过程中使用动态sql有什么特别的原因吗?动态sql看起来对您正在做的事情完全没有必要,事实上,它会让您面临sql注入攻击。@Steve sir我添加了调用此存储过程的函数。。。使用它们绑定网格作为旁注,您在存储过程中使用动态sql有什么特别的原因吗?动态sql看起来对您正在做的事情完全没有必要,事实上会让您面临sql注入攻击。您需要对
idUser
执行同样的检查,也要这样检查where U.idUser='''+@idUser++''
您需要对idUser
执行同样的检查,也要这样检查where U.idUser='+@idUser+'