首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

存储过程,该如何解决

2011-12-31 
存储过程CREATEPROCEDURESearchRoomType--Addtheparametersforthestoredprocedurehere@RoomTypeIDvarchar(

存储过程
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也为空呢
这里已经不太会写了   要是不按编号搜索   这里可以用编号的
但是现在我要用编号搜索啊

一个问题已经都捆饶我多日了   希望高手给你答复。。。

[解决办法]
你的存储过程总是看的有点怪异,而且数据库里判断为空是 is null


[解决办法]
使用动态的SQL即可

[解决办法]
例如

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

[解决办法]
SET @m_SqlString= 'SELECT * FROM dbo.RoomType Where 1=1 '这样跟据条件一个一个的连接上去,即可?保证了,前面是否有选择条件。

热点排行