Хранимая процедура не обновляет базу данных asp.net с#

#c# #asp.net #sql-server #stored-procedures

#c# #asp.net #sql-сервер #хранимые процедуры

Вопрос:

Вот хранимая процедура в базе данных.

 CREATE PROCEDURE Taskedb_Insert
(

    @nNewID int output,
    @sFromEmail varchar(200)  = NULL,
    @sToEmail varchar(200)  = NULL,
    @sEmailSubject varchar(400)  = NULL,
    @sEmailBody varchar(MAX)  = NULL,
    @dEmailDate datetime  = NULL
)   
AS
 BEGIN

INSERT INTO [Taskedb]
(

    FromEmail, 
    ToEmail, 
    EmailSubject, 
    EmailBody, 
    EmailDate
) VALUES (

    @sFromEmail,
    @sToEmail,
    @sEmailSubject,
    @sEmailBody,
    @dEmailDate
)
SELECT @nNewID = @@IDENTITY
END
  

И это код в ASP.NET С#

 string connectionString = "Data Source=.\SQLEXPRESS;Initial Catalog=tbd_email_tasks;Integrated Security=True";

SqlConnection connection = new SqlConnection(connectionString);

connection.Open();

SqlCommand cmd = new SqlCommand("Taskedb_Insert", connection);
cmd.CommandType = System.Data.CommandType.StoredProcedure;

SqlParameter p1 = cmd.Parameters.Add("@nNewID", System.Data.SqlDbType.Int);
p1.Direction = System.Data.ParameterDirection.Output;

SqlParameter p2 = cmd.Parameters.Add("@sEmailSubject", System.Data.SqlDbType.VarChar);
p2.Value = subject;

SqlParameter p3 = cmd.Parameters.Add("@sEmailBody", System.Data.SqlDbType.VarChar);
p3.Value = body;

SqlParameter p4 = cmd.Parameters.Add("@sToEmail", System.Data.SqlDbType.VarChar);
p4.Value = to;

SqlParameter p5 = cmd.Parameters.Add("@sFromEmail", System.Data.SqlDbType.VarChar);
p5.Value = from;

SqlParameter p6 = cmd.Parameters.Add("@dEmailDate", System.Data.SqlDbType.DateTime);
p6.Value = date;

//connection.Open();
cmd.ExecuteNonQuery();
  

Это не обновление базы данных. Пожалуйста, помогите мне.

Комментарии:

1. Какую ошибку вы получаете?

2. @PareshJ Я не получаю никаких ошибок, но этот код ничего не сохраняет в базе данных.

3. Вместо этого вам следует рассмотреть возможность использования SCOPE_IDENTITY . Не уверен, почему вы по умолчанию присвоили всем своим параметрам значение NULL, вы передаете значения. Кроме того, я бы очень настоятельно рекомендовал вам отказаться от привычки добавлять префиксы к переменным с типом данных. Что происходит, когда вам нужно изменить тип данных? Вам либо нужно обновлять каждую строку кода, либо у вас недопустимые префиксы.

4. Что касается рассматриваемой проблемы, выполняется ли ваша процедура? Есть ли в этой таблице триггер, который может устранить ошибку? Вы проверили, изменилось ли значение для IDENT_CURRENT ?

5. Когда я отлаживаю и выполняю cmd. ExecuteNonQuery() Я получил эту ошибку -> «Строка или двоичные данные будут усечены. rN Инструкция была завершена «.

Ответ №1:

Спасибо всем за помощь

Я получал эту ошибку, потому что моя таблица Taskedb имела

nvarchar(50)

но я вводил 67 символов, что привело к этой ошибке. Изменение его на

nvarchar(МАКСИМУМ)

Проблема исправлена

Ответ №2:

Вы могли бы проверить, возможно ли это в области транзакции или что-то в этом роде. И, конечно, я бы обернул ваше подключение к БД и команду в using block.