是否可以在 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 时是否可以这样做?:(