c# - 如何使用 ADO.NET 将 ref 变量传递给 SQL 存储过程?

标签 c# asp.net sql-server ado.net

我有使用 LINQ 调用存储过程以将一些数据保存到数据库中的代码,然后从存储过程返回两个变量。

[ASP.NET 代码]

dbDataContext dbo = new dbDataContext();
dbo.AddNewDoctor(doctorName, email, password, ref DocId, ref result);

[SQL]

create PROCEDURE [dbo].[AddNewDoctor]
    @doctorname nvarchar(100),
    @email nvarchar(100),
    @password nvarchar(MAX),
    @docId int out,
    @Result int out

AS
BEGIN
    SET NOCOUNT ON;
        declare @idCounter int
    select @idCounter = count(*) from dbo.doctors
    if EXISTS (select * from dbo.doctors where e_mail = @email) 
    begin
        SET @Result = -1
        set @docId= 0 
    end
    else
    begin
    INSERT INTO [dbo].[doctors]
           ([doctor_id]
           ,[doctorname]
           ,[e_mail]
           ,[password]           
     VALUES
           ((@idCounter +1)
           ,@docotorname
           ,@email
           ,@password
           )
            SET @Result = 1
            set @docId= (@idCounter + 1) 
    end 
END

这段代码工作得很好,我现在想要使用 ADO 而不是 LINQ,我的问题是我无法像 LINQ 中那样传递 ref 变量,所以我如何使用 ADO 来做到这一点

最佳答案

你必须做这样的事情。使用ParameterDirection

 SqlParameter output = new SqlParameter(paramName, dbType);
 output.Direction = ParameterDirection.Output;
 command.Parameters.Add(output);

在您的情况下,您必须使用SqlDbType.Int。使用 Value 属性读取返回值。

SqlParameter output = new SqlParameter(paramName, SqlDbType.Int);
output.Direction = ParameterDirection.Output;
command.Parameters.Add(output);

int Result = (int) output.Value; or int? Result = (int?) output.Value;

关于c# - 如何使用 ADO.NET 将 ref 变量传递给 SQL 存储过程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18481115/

相关文章:

c# - ListboxItem 不同状态之间的动画

c# - 如何编写一个返回 6 个字符长度的唯一字符串的方法?

asp.net - 使用 IIS 随机 404

sql-server - 大量文本或 excel 数据更快地导入 sql

sql - GETDATE() 和 DateTime.Now 一样昂贵吗?

c# - winform 上的透明背景?

c# - EF 中 IDatabaseInitializer 的正确用法是什么?

asp.net - 为 Sitecore 配置故障转移合作伙伴

jquery - Kendo Treeview 节点编辑/更新

sql - 如何在 INNER JOIN 之前执行 WHERE 子句