c# - SQL Scope_Identity 返回 0 或 -1

标签 c# sql stored-procedures scope-identity

我在获取最后一行受影响的 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)
);

最佳答案

ExecuteScalar '执行查询,返回查询返回的结果集中第一行的第一列。其他列或行将被忽略'

如果您选择@fileID(而不是返回),它应该可以工作。
或者,您可以在执行查询后访问 @fileID 参数值,在这种情况下,ExecuteScalar 没有实际意义,您可以将其更改为 ExecutenonQuery

关于c# - SQL Scope_Identity 返回 0 或 -1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17547298/

相关文章:

c# - 允许鼠标消息的子集通过 WPF 中的控件

c# - 如何对在C#中使用LINQ使用反射找到的属性进行排序?

c# - RESTful/基于 token 的 Web API 身份验证而不是 Web Security.Login

SQL Server 选择行

sql - SQL中查找保留关键字

mysql - 尝试创建 SQL 过程但出现错误

c# - 使用 Watin 登录网页

java - 将 BLOB 文件从本地插入数据库

php - SELECT JOIN MySQL 查询中一列的唯一值

sql-server - 为什么 Entity Framework 中的事务失败