#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.