Asp.net 为什么我的存储过程不能正确运行?
我有一个asp.net 4.0应用程序运行sql 2008 db。我有一个非常基本的存储过程,用于返回记录。当我在.net ide服务器资源管理器中执行它时,它就会工作。但是,当我一步一步地浏览.net代码时,即使变量以我喜欢的方式传递(之前已经多次传递过),也不会返回任何内容。这是存储过程Asp.net 为什么我的存储过程不能正确运行?,asp.net,stored-procedures,Asp.net,Stored Procedures,我有一个asp.net 4.0应用程序运行sql 2008 db。我有一个非常基本的存储过程,用于返回记录。当我在.net ide服务器资源管理器中执行它时,它就会工作。但是,当我一步一步地浏览.net代码时,即使变量以我喜欢的方式传递(之前已经多次传递过),也不会返回任何内容。这是存储过程 ALTER PROCEDURE get_cases_by_search_criteria @vin as varchar(50) = null AS declare @sqlstr var
ALTER PROCEDURE get_cases_by_search_criteria
@vin as varchar(50) = null
AS
declare @sqlstr varchar(5000)
set @sqlstr = 'SELECT
[Case].CaseID,
[Case].VIN,
[Case].Make,
[Case].Model,
Contact.FirstName,
Contact.LastName,
FROM [Case] INNER JOIN
Contact ON [Case].CaseID = Contact.CaseID
Where Contact.ContactTypeID = 1 '
if @vin is not null and @vin <> ''
BEGIN
set @sqlstr = @sqlstr + ' and ' + ('[Case].VIN = ''' + convert(varchar,@vin) + '''')
END
exec(@sqlstr)
当
@vin
等于时会发生什么;删除数据库UserDB--代码>
这可能不是您想要解决的问题,但您使用动态SQL的方式使您容易受到攻击
不要使用exec(@sql)
string,而应该使用sp\u executesql
,并将@vin
DECLARE @sqlstr varchar(5000)
DECLARE @ParmDefinition NVARCHAR(500)
SET @sqlstr = 'SELECT
[Case].CaseID,
[Case].VIN,
[Case].Make,
[Case].Model,
Contact.FirstName,
Contact.LastName,
FROM [Case] INNER JOIN
Contact ON [Case].CaseID = Contact.CaseID
Where Contact.ContactTypeID = 1 '
IF @vin is not null and @vin <> ''
BEGIN
SET @sqlstr = @sqlstr + ' and [Case].VIN = @vinparm'
END
SET @ParmDefinition = N'@vinparm varchar(50)'
EXECUTE sp_executesql @sqlstr, @ParmDefinition, @vinparm = @vin
DECLARE@sqlstr varchar(5000)
声明@ParmDefinition NVARCHAR(500)
SET@sqlstr='选择
[案例].CaseID,
[案例].VIN,
[案例]。制作,
[案例].模型,
联系人:FirstName,
Contact.LastName,
来自[案例]内部联接
[Case]上的联系人。CaseID=Contact.CaseID
其中Contact.ContactTypeID=1'
如果@vin不为空且@vin“”
开始
设置@sqlstr=@sqlstr+'和[Case].VIN=@vinparm'
终止
设置@ParmDefinition=N'@vinparm varchar(50)'
执行sp_executesql@sqlstr、@ParmDefinition、@vinparm=@vin
您能否执行SQL Management studio并打印@sqlstr?它可能会帮助您确定select语句是否有错误。我可以看到您的代码没有问题。也许可以尝试在一条语句oCmd.Parameters.Add(“@vin”,oSearchCriteria.vin,DbType.String)中添加参数,如果我打印出来并完全按照预期打印出来(在为vin输入有效参数之后)。而且,当我复制并粘贴到sql编辑器中时,它会运行并返回记录!是否使用SQLDataAdapter读取断开连接的记录集?是否确定web.config指向正确的服务器和数据库?另外,您是否可以使用SQL Profiler监视数据库服务器,以确保查询将转到它?
DECLARE @sqlstr varchar(5000)
DECLARE @ParmDefinition NVARCHAR(500)
SET @sqlstr = 'SELECT
[Case].CaseID,
[Case].VIN,
[Case].Make,
[Case].Model,
Contact.FirstName,
Contact.LastName,
FROM [Case] INNER JOIN
Contact ON [Case].CaseID = Contact.CaseID
Where Contact.ContactTypeID = 1 '
IF @vin is not null and @vin <> ''
BEGIN
SET @sqlstr = @sqlstr + ' and [Case].VIN = @vinparm'
END
SET @ParmDefinition = N'@vinparm varchar(50)'
EXECUTE sp_executesql @sqlstr, @ParmDefinition, @vinparm = @vin