【发布时间】:2013-08-28 06:48:38
【问题描述】:
我有该代码使用 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 来完成它
【问题讨论】:
-
永远不要在你的代码中使用像 set @docId= (@idCounter + 1) 这样的东西,因为它会让你的程序不能多用户使用。
-
感谢您 BendEg 的建议,但您能否说明更多,因为我不明白为什么
-
我会将您的 ID-Column 设置为 Identity-Column,然后使用 @@IDENTITY 获取新的 Identity,因为可以同时执行存储过程,而不是系统会尝试为两位医生设置相同的 ID。 technet.microsoft.com/de-de/library/ms174639.aspx
-
@BendEg 你能举个小例子吗?
标签: c# asp.net sql-server ado.net