1

是否可以在 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 语句放置一个 1 参数它仍然给了我与第一个 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 时是否可以这样做?:(

4

0 回答 0