У меня очень странная проблема. Когда я выполняю определенную хранимую процедуру базы данных из C # с помощью SqlCommand.ExecuteNonQuery, моя хранимая процедура никогда не выполняется.
Кроме того, SQL Profiler вообще не регистрирует команду. Я не получаю тайм-аут команды, и исключение не выдается.
Самое странное, что этот код работал нормально более 1 200 000 раз, но для этого конкретного файла, который я вставляю в базу данных, он просто зависает навсегда.
Когда я убиваю приложение, я получаю эту ошибку в журнале событий сервера базы данных: "A fatal error occurued while reading the input stream from the network. The session will be terminated (input error: 64, output error: 0).
Что заставляет меня думать, что сервер базы данных получает команду, хотя SQL Profiler говорит иначе.
Я знаю, что соответствующие разрешения установлены, и что строка подключения верна, так как этот фрагмент кода и хранимая процедура отлично работают с другими файлами.
Ниже приведен код, который вызывает хранимую процедуру, может быть важно отметить, что размер файла, который я пытаюсь вставить, составляет 33,5 МБ, но я добавил более 10000 файлов размером более 500 МБ, поэтому я не думаю, что размер это проблема:
using (SqlConnection sqlconn = new SqlConnection(ConfigurationManager.ConnectionStrings["TheDatabase"].ConnectionString))
using (SqlCommand command = sqlconn.CreateCommand())
{
command.CommandText = "Add_File";
command.CommandType = CommandType.StoredProcedure;
command.CommandTimeout = 30 //should timeout in 30 seconds, but doesn't...
command.Parameters.AddWithValue("@ID", ID).SqlDbType = SqlDbType.BigInt;
command.Parameters.AddWithValue("@BinaryData", byteArr).SqlDbType = SqlDbType.VarBinary;
command.Parameters.AddWithValue("@FileName", fileName).SqlDbType = SqlDbType.VarChar;
sqlconn.Open();
command.ExecuteNonQuery();
}
Нет брандмауэра между сервером, выполняющим вызов, и сервером базы данных, и брандмауэры Windows были отключены для устранения этой проблемы.