我在获取最后一行受影响的ID时遇到问题,它返回0,这意味着它在插入格式时出错。我执行了存储过程并手动添加了值,它返回了正确的ID。但是当我尝试使用代码时,它会一直返回0或-1 ...我在几个小时之后的昨晚尝试了这个,我已经对它给我的价值感到困惑了。
C#:
conn.Open();
cmd.Parameters.AddWithValue("@fileName", fileName);
cmd.Parameters.AddWithValue("@filePrivacy", filePrivacy);
cmd.Parameters.AddWithValue("@filePassword", filePassword);
cmd.Parameters.AddWithValue("@fileDescription", fileDesc);
cmd.Parameters.AddWithValue("@fileOwner", fileOwner);
cmd.Parameters.AddWithValue("@fileDate", DateTime.Now);
cmd.Parameters.AddWithValue("@fileExpire", DateTime.Now.AddMinutes(fileExpire));
cmd.Parameters.AddWithValue("@fileCodeText", fileType);
var fileID = cmd.Parameters.Add("@fileID", SqlDbType.Int);
fileID.Direction = ParameterDirection.Output;
int returnfileID = (int)cmd.ExecuteScalar();
return returnfileID;
存储过程:
CREATE PROCEDURE [dbo].[Upload]
@fileName nvarchar(20),
@filePrivacy int,
@filePassword nvarchar(50),
@fileDescription nvarchar(200),
@fileOwner nvarchar(14),
@fileDate smalldatetime,
@fileExpire smalldatetime,
@fileCodeText int,
@fileID int out
AS
INSERT INTO Files ([FileName], FilePrivacy, FilePassword, FileDescription, FileOwner, FileDate, FileExpire, FileCodeText)
VALUES (@fileName, @filePrivacy, @filePassword, @fileDescription, @fileOwner, @fileDate, @fileExpire, @fileCodeText)
SET @fileID = SCOPE_IDENTITY()
RETURN @fileID
SQL表:
CREATE TABLE [dbo].[Files] (
[Id] INT IDENTITY (1, 1) NOT NULL,
[FileName] NVARCHAR (20) NOT NULL,
[FilePrivacy] INT NOT NULL,
[FilePassword] NVARCHAR (50) NULL,
[FileDescription] NVARCHAR (200) NULL,
[FileOwner] NVARCHAR (14) NOT NULL,
[FileDate] SMALLDATETIME NOT NULL,
[FileExpire] SMALLDATETIME NOT NULL,
[FileCodeText] INT NOT NULL,
PRIMARY KEY CLUSTERED ([Id] ASC)
);
答案 0 :(得分:4)
ExecuteScalar '执行查询,并返回查询返回的结果集中第一行的第一列。其他列或行将被忽略'
如果选择@fileID(而不是返回),它应该可以工作
或者,您可以在执行查询后访问@fileID参数值,在这种情况下,没有真正的点具有ExecuteScalar,您可以将其更改为ExecutenonQuery
。
答案 1 :(得分:0)
在SQL中使用
SET @fileID= SCOPE_IDENTITY() RETURN @fileID
SELECT @@IDENTITY;
和C#代码
int returnfileID = Convert.ToInt32(cmdInsert.ExecuteScalar())
答案 2 :(得分:0)
我最初的想法是你要取回存储过程的返回码。由于您已将其设置为OUTPUT参数,因此应由存储过程返回@fileID。从存储过程中删除RETURN。它应该传回输出变量而不是执行代码。