2

我有该代码使用 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

4

3 回答 3

4

你必须做这样的事情。使用 参数方向

 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;
于 2013-08-28T06:52:50.730 回答
1

尝试这个

    using (SqlConnection con = new SqlConnection("Your connection string"))
    {
        con.Open();
        SqlCommand mycommand = new SqlCommand();
        mycommand.Connection = con;
        mycommand.CommandText = "dbo.AddNewDoctor";
        mycommand.CommandType = CommandType.StoredProcedure;

        mycommand.Parameters.AddWithValue(doctorName);
        mycommand.Parameters.AddWithValue(email);
        mycommand.Parameters.AddWithValue(password);
        mycommand.Parameters.AddWithValue(ref DocId);
        mycommand.Parameters.AddWithValue(ref result);


        mycommand.ExecuteNonQuery();
    }

希望这有帮助谢谢。

于 2013-08-28T06:54:41.950 回答
0

参考这篇文章,有一个工作示例:

http://csharp-guide.blogspot.de/2012/05/linq-to-sql-call-stored-procedure-with_25.html

于 2013-08-28T06:57:54.613 回答