Я пытался решить эту проблему безуспешно. Я посмотрел на следующие ссылки здесь , здесь и здесь , но я получаю
Ссылка на объект не установлена в экземпляр объекта.
или
В процедуре или функции InsertHero указано слишком много аргументов.
Когда я выполняю хранимую процедуру в SSMS мои идентификаторы также отключаются в том смысле, что они увеличиваются с 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
РЕДАКТИРОВАТЬ:
Оставьте это здесь на случай, если кто-то наткнется на него. Оказалось, проблема со строкой подключения, поэтому обязательно удвойте и, возможно, сделайте тройную проверку