Я хочу вставить запись в базу данных SQL Server, но у меня возникло странное исключение в процессе ExecuteNonQuery(). У меня есть это исключение:SqlCommand ExecuteNonquery странное исключение
ExecuteNonQuery requires an open and available Connection.
The connection's current state is closed.
Однако моя проблема не связана с этим. Я определенно уверен, что текущее состояние моего соединения открыто. Моя проблема - один из моих параметров в моем запросе. Вот мой запрос:
sql = "update EMAIL_CONNECTIONS " +
"set [email protected], " +
"[email protected], " +
"[email protected], " +
"[email protected], " +
"[email protected], " +
"[email protected] " +
"where [email protected] " +
"and STATUS = 'Inprocess'; ";
sql += "insert into ICS_EMAIL_CONNECTIONS_TRX(SESSIONID, AGENTID, STATUS, FIELD1) " +
"values(@SessionId, @AgentId, @Status, 'Sended this mail')";
Исключение из-за параметра @EmailOutSentDate. Он не принимает формат Datetime или что-то, что я не знаю. Когда я даю DateTime.Now этому параметру, запрос выполняется успешно. Я также попробовал DBNull.Value и запрос работает отлично. Проблема DateTime не связана с Исключением.
SqlConnection _cnn = new SqlConnection();
_cnn.ConnectionString = connectionString;
_cnn.Open();
SqlCommand cmd = new SqlCommand(sql, _cnn);
cmd.Parameters.Add(new SqlParameter("@EndDate", DateTime.Now));
cmd.Parameters.Add(new SqlParameter("@Status", "Sent"));
DateTime result = DateTime.MinValue;
result = DateTime.ParseExact(result.ToString("yyyy-mm-dd HH:mm:ss.fff"), "yyyy-mm-dd HH:mm:ss.fff", null);
DateTime newdate = DateTime.SpecifyKind(result, DateTimeKind.Local);
cmd.Parameters.Add(new SqlParameter("@EmailOutSentDate", newdate));
cmd.Parameters.Add(new SqlParameter("@ToAddress", interaction.AllAttributes["To"]));
cmd.Parameters.Add(new SqlParameter("@StatusDate", DateTime.Now));
cmd.Parameters.Add(new SqlParameter("@CategoryCode", long.Parse(CategoryCode)));
cmd.Parameters.Add(new SqlParameter("@SessionId", interaction.Id));
cmd.Parameters.Add(new SqlParameter("@AgentId", Agent.AgentId));
cmd.CommandType = System.Data.CommandType.Text;
cmd.ExecuteNonQuery();
cmd.Dispose();
Как вы можете видеть, я также испробовал свойство DateTime.Kind, но все же исключил Исключение. В чем проблема? Любые предложения?
ли стек из точки исключения обратно в ExecuteNonQuery, который показан здесь? или это исключение, возможно, исходит из какой-либо обработки исключений, которую вы не показываете? Также: 'использование'. Вы должны использовать '(var _cnn = ...)' и 'using (var cmd = ...)' –
«Он не принимает формат Datetime или что-то еще» - datetime не отправляются на сервер sql в виде текста; это не вопрос форматирования –
btw; не связанный - как вы построили значение 'sql' - знаете ли вы, что можете сделать это более просто, используя строковые литералы? т. е. 'sql = @" {ваш текст здесь, может включать строки и т. д., просто нажав return} ";' –