当前位置: 代码迷 >> C# >> 【SQL server】找不到微软的SQL版区,又是用C#编纂,所以在这里发问了。版主手下留情
  详细解决方案

【SQL server】找不到微软的SQL版区,又是用C#编纂,所以在这里发问了。版主手下留情

热度:84   发布时间:2016-05-05 04:45:42.0
【SQL server】找不到微软的SQL版区,又是用C#编写,所以在这里发问了。版主手下留情~
我写了一个存储过程。怎么都获取不到output的值。sql里面调试看到值为正确的。但是调试走完后,读取出来为null。
create proc Search_Lamp
(
@panduan varchar(1),
@Lamp varchar(20),
@Factory varchar(20),
@count varchar(5) output
)
as
BEGIN
if exists(select * from Factory where @panduan='1')
BEGIN
select @count=Count(*) from Lamp l,Factory f 
 where L_Name Like @Lamp and l.F_ID=f.F_ID
select f.F_ID,l.L_ID,l.L_Name,f.F_Name from Lamp l,Factory f 
 where L_Name Like @Lamp and l.F_ID=f.F_ID order by f.F_ID asc,l.L_ID asc
 
END
else
if exists(select * from Factory where @panduan='2')
BEGIN
select @count=Count(*) from Lamp l,Factory f 
 where F_Name Like @Factory and l.F_ID=f.F_ID
select f.F_ID,l.L_ID,l.L_Name,f.F_Name from Lamp l,Factory f 
 where F_Name Like @Factory and l.F_ID=f.F_ID order by f.F_ID asc,l.L_ID asc
 
END
else
if exists(select * from Factory where @panduan='3')
BEGIN
select @count=Count(*) from Lamp l,Factory f 
 where L_Name Like @Lamp and F_Name Like @Factory and l.F_ID=f.F_ID
select f.F_ID,l.L_ID,l.L_Name,f.F_Name from Lamp l,Factory f 
 where L_Name Like @Lamp and F_Name Like @Factory and l.F_ID=f.F_ID order by f.F_ID asc,l.L_ID asc

END
END

正常情况下我输入值后,count获取的值为3.调试也是的。但是就是运行得不到值,直接null。。另一个select的查询结果也是对了的。不过我在C#里面用sqldatareader想读取select的那张表,也读不出来,dr.Read();没有值。
是不是我哪里写错了啊?
我之前写了一个存储过程,获取传出参数和dr表,都没有问题。附上存储过程:
create proc Sreach_LampandFactory
(
@return varchar(2) output
)
as
BEGIN
select @return=count(L_ID) from Lamp
select f.F_ID,l.L_ID,f.F_Name,l.L_Name,l.L_Purchace,l.L_Price,l.L_Number from Lamp l,Factory f where f.F_ID=l.F_ID order by f.F_ID asc ,l.L_ID asc
END


@sp1234
真不好意思。每次都有你解答了。
------解决思路----------------------
引用:
Quote: 引用:


那就结贴,给分。
这么坑!不能给自己的

那不是变成倒分了么。。。你要不给。你的结贴率就下降了
还是给吧
------解决思路----------------------
要是连通配符也能传递进去,那还不SQL注入了
------解决思路----------------------
使用的一个建议 不要使用count(*),特别是用exists做判断的时候,增加了很多不必要的消耗
------解决思路----------------------
恭喜lz自己解决。
------解决思路----------------------
exists 时 select 1 
count时 count(1)
------解决思路----------------------
引用:
Quote: 引用:

exists 时 select 1 
count时 count(1)

o.o
哦。谢谢你咯。受教了,1是代表第一列是吧


不是 他是一个值,不代表一列。
------解决思路----------------------
引用:
Quote: 引用:

Quote: 引用:

exists 时 select 1 
count时 count(1)

o.o
哦。谢谢你咯。受教了,1是代表第一列是吧


不是 他是一个值,不代表一列。

百度了一下,原来如此,长知识啊
http://zhidao.baidu.com/link?url=BNaLgknNAWggddEoRfJKztqzQoa8m-sZhJfsh02ZqzFWXfQVjuOMEeLRmA2nxuPxSrmpj-1wCORhX3U8E91H_K
------解决思路----------------------
引用:
Quote: 引用:

Quote: 引用:

exists 时 select 1 
count时 count(1)

o.o
哦。谢谢你咯。受教了,1是代表第一列是吧


不是 他是一个值,不代表一列。



 var strWhere = PredicateBuilder.True<Apply_Form_List_View>();
            strWhere = strWhere.And(x => x.isSynchron == 0);
            strWhere = strWhere.And(x => x.School_Id == schoolid);
            if (findparam["stu"] != null) 
            {
                string stu = findparam["stu"].ToString();
                strWhere = strWhere.And(s => s.F_FirstName.Contains(stu));
            }
            if (findparam["course"] != null)
            {
                string course = findparam["course"].ToString();
                strWhere = strWhere.And(s => s.Course_Title.Contains(course));
            }

  var query = nContext.Apply_Form_List_View.AsExpandable().Where(strWhere).ToList();

就是这样的动态
------解决思路----------------------
Microsoft SQL Server 版
  相关解决方案