存储过程

gangzichh 2007-05-05 10:17:11
CREATE PROCEDURE SearchRoomType
-- Add the parameters for the stored procedure here
@RoomTypeID varchar(10),
@TypeName varchar(20)
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;

-- Insert statements for procedure here
DECLARE @m_SqlString varchar(8000);
DECLARE @m_RoomTypeID varchar(8000);
DECLARE @m_TypeName varchar(8000);

SET @m_SqlString='SELECT * FROM dbo.RoomType Where TypePrice<>0';

iF(@RoomTypeID<>'')
Begin
Set @m_RoomTypeID =' AND TypeNameID LIKE '+CHAR(40)+'%'+@RoomTypeID+'%'+CHAR(40);
End

IF(@TypeName<>'')
Begin
SET @m_TypeName=' AND TypeName LIKE '+CHAR(40)+'%'+@TypeName+'%'+CHAR(40);
END

EXEC(@m_SqlString+@m_TypeName+@m_RoomTypeID);
END
GO



调用存储过程:

private void SearchRoomType()
{
try
{
string Connstr = "server=.;database=Hostel;uid=sa;pwd=123";
SqlCommand sc = new SqlCommand();
sc.Connection = new SqlConnection(Connstr);


sc.CommandText = "SearchRoomType";
sc.CommandType = CommandType.StoredProcedure;

SqlParameter sp = sc.Parameters.Add("@RoomTypeID", SqlDbType.VarChar, 10);
sp.Value = txtNumber1.Text;

sp = sc.Parameters.Add("@TypeName", SqlDbType.VarChar, 20);
sp.Value = txtName1.Text;

SqlDataAdapter sda = new SqlDataAdapter(sc);
DataSet ds = new DataSet();

sda.Fill(ds,"RoomType");

this.dgRoomTypeList.DataSource = ds.Tables["RoomType"];
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}


这是一个完成搜索功能的存储过程

我在txtNumber1输入编号 或是在txtName1输入名称
都能显示在dgRoomTypeList中 要是不输入 也就是全显示出来了

但是和我想象的不太一样

还有存储过程还是觉得写的有点问题:
SET @m_SqlString='SELECT * FROM dbo.RoomType Where TypePrice<>0';

要是没有TypePrice也为空呢
这里已经不太会写了 要是不按编号搜索 这里可以用编号的
但是现在我要用编号搜索啊

一个问题已经都捆饶我多日了 希望高手给你答复。。。
...全文
277 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
gangzichh 2007-05-08
  • 打赏
  • 举报
回复
...
gangzichh 2007-05-06
  • 打赏
  • 举报
回复
大家就不能帮我一下么

都干什么呢

斑竹水平呢。。。
gangzichh 2007-05-05
  • 打赏
  • 举报
回复
TO cellblue(cellblue):

我就想用这样的啊
这样的还能熟悉点呢。。。
gangzichh 2007-05-05
  • 打赏
  • 举报
回复
amandag(高歌)

is null?
cellblue 2007-05-05
  • 打赏
  • 举报
回复
例如

CREATE PROCEDURE [dbo].[pro_T_Common_ApplyType_SelectDynamic]
@WhereCondition nvarchar(500),
@OrderByExpression nvarchar(250) = NULL
AS

SET NOCOUNT ON
SET TRANSACTION ISOLATION LEVEL READ COMMITTED

DECLARE @SQL nvarchar(3250)

SET @SQL = '
SELECT
[ApplyType],
[ApplyTypeName]
FROM
[dbo].[T_Common_ApplyType]
WHERE
' + @WhereCondition

IF @OrderByExpression IS NOT NULL AND LEN(@OrderByExpression) > 0
BEGIN
SET @SQL = @SQL + '
ORDER BY
' + @OrderByExpression
END

EXEC sp_executesql @SQL
cellblue 2007-05-05
  • 打赏
  • 举报
回复
使用动态的SQL即可
gangzichh 2007-05-05
  • 打赏
  • 举报
回复
还不行啊

我在txtNumber1和 txtName1 输入数字(*)时

都会显示 *附近有错误。。。

帮忙
amandag 2007-05-05
  • 打赏
  • 举报
回复
你的存储过程总是看的有点怪异,而且数据库里判断为空是 is null

yongyupost2000 2007-05-05
  • 打赏
  • 举报
回复
SET @m_SqlString='SELECT * FROM dbo.RoomType Where 1=1'这样跟据条件一个一个的连接上去,即可?保证了,前面是否有选择条件。
gangzichh 2007-05-05
  • 打赏
  • 举报
回复
大虾们帮我看看这个:

http://community.csdn.net/Expert/topic/5511/5511536.xml?temp=.1829645

新书给一个推荐
gangzichh 2007-05-05
  • 打赏
  • 举报
回复
难道高手都。。。
ProjectDD 2007-05-05
  • 打赏
  • 举报
回复
学习一下

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧