在存储过程中使用多个IF语句,使用不同的参数调用Linq C#

时间:2013-10-08 08:31:09

标签: c# sql-server linq stored-procedures

是否可以在c#中使用存储过程,因为我已经在VB.net上尝试了它,当我可以设置它只需要的参数时让我们说我有一个这样的存储过程:

    ALTER PROC [dbo].[StoreProcedure_Test01]
    (    
        @Param01 nvarchar(35) = NULL,
        @Param02  smallint = NULL,
        @Param03 char(21) = NULL,
        @Param04 datetime = NULL,       
        @Type bigint
    )    
    WITH EXECUTE AS CALLER
    AS
    BEGIN    
    SET NOCOUNT ON;        
    BEGIN TRY    
        BEGIN TRANSACTION;
        IF @Type =1
        BEGIN
          SELECT Col1, Col2, Col3 From TABLE00 Col00 = @Param2           
        END
        IF @Type = 2
        BEGIN
          Select * FROM TABLE01 where Col01 = @Param1 and Col04 = @Param03
        END
END

现在在我调用存储过程的C#代码中我喜欢这样:

var query = (from i in LinQ.StoreProcedure_Test01(Param01, Param02, Param03, Param04, 1) where i.Col00 == 1 select new { AA = i.Param01, AB = i.Param02 });

现在在参数上我为存储过程中的if语句放置1,问题是如果我选择它,只给我第一个if语句返回数据,如果我这样做:

var query = (from i in LinQ.StoreProcedure_Test01(Param01, Param02, Param03, Param04, 2) where i.Col00 == 1 select new { "ALL TABLE" });

为存储过程中的if语句设置了一个参数,它仍然从第一个if语句给出了相同的返回数据,它忽略了第二个if语句是否有一种方法可以使用存储过程为多个条件的c#和我使用虚拟表时特别需要的参数也忽略了它。有可能吗?

只是为了加上我的一些流行行为,我尝试使用ado.net框架在vb.net上做这件事。

Try
            cmd = New SqlCommand
            da = New SqlDataAdapter

            cmd.Connection = con
            cmd.CommandText = "[StoreProcedure_Test01]" 'this is your store procedure
            cmd.CommandType = CommandType.StoredProcedure

            With cmd

                .Parameters.Add(New SqlParameter("@Param01", SqlDbType.NVarChar))
                .Parameters("@Param01").Direction = ParameterDirection.Input
                .Parameters("@Param01").Value = Parameter01

                .Parameters.Add(New SqlParameter("@Param02", SqlDbType.NVarChar))
                .Parameters("@Param02").Direction = ParameterDirection.Input
                .Parameters("@Param02").Value = Parameter02

                .Parameters.Add(New SqlParameter("@Param03", SqlDbType.NVarChar))
                .Parameters("@Param03").Direction = ParameterDirection.Input
                .Parameters("@Param03").Value = Parameter03

                .Parameters.Add(New SqlParameter("@Param04", SqlDbType.NVarChar))
                .Parameters("@Param04").Direction = ParameterDirection.Input
                .Parameters("@Param04").Value = Parameter04

                .Parameters.Add(New SqlParameter("@Type", SqlDbType.Int))
                .Parameters("@Type").Direction = ParameterDirection.Input
                .Parameters("@Type").Value = 1

            End With
            cmd.ExecuteNonQuery()
            Return True

        Catch ex As Exception
            MsgBox(ex.Message)
        Finally
            cmd.Dispose()
        End Try

如上所示它的灵活性因为我可以添加与我所做的商店程序条件相同的参数我想知道的是,当涉及到c#linq是否可以这样做? :(

0 个答案:

没有答案