【发布时间】:2020-08-09 07:21:54
【问题描述】:
我尝试了两种不同的想法来解决这个问题,但没有成功。我查看了以下链接 here、here 和 here 但我最终得到了
对象引用未设置为对象的实例。
或
过程或函数 InsertHero 指定的参数过多。
当我在 SSMS 中执行存储过程时,我的 ID 也显示为关闭,因为它们从 1110 而不是设置为 100 的原始数字递增(这可能是一个不同的问题)。
似乎我已经完成了 99% 的工作,但我错过了一小部分。我错过了什么?
C#:
using (SqlConnection connection = new SqlConnection(ConnectionString))
{
connection.Open();
using (SqlCommand command = new SqlCommand("InsertHero", connection))
{
command.CommandType = CommandType.StoredProcedure;
command.Parameters.AddWithValue("@Name", hero.Name);
command.Parameters.AddWithValue("@Universe", hero.Universe);
// command.Parameters.Add("@Created_Id", SqlDbType.Int).Direction = ParameterDirection.Output;
int id = (int)command.ExecuteScalar();
}
}
存储过程:
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[InsertHero]
@Name nvarchar(50),
@Universe nvarchar(15),
@Created_Id int OUTPUT
AS
INSERT INTO Hero
VALUES (@Name, @Universe);
SET @Created_Id = SCOPE_IDENTITY()
GO
存储过程(不同的方式):
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[InsertHero]
@Name nvarchar(50),
@Universe nvarchar(15) OUTPUT
AS
INSERT INTO Hero
OUTPUT inserted.Id
VALUES (@Name, @Universe);
GO
编辑:
把这个留在这里,以防有人偶然发现它。原来是连接字符串有问题,所以一定要双重检查,也许三重检查
【问题讨论】:
-
您应该查看Can we stop using AddWithValue() already? 并停止使用
.AddWithValue()- 它可能会导致意想不到和令人惊讶的结果...
标签: c# sql-server tsql stored-procedures