Database.ExecuteNonQuery не возвращает - PullRequest
2 голосов
/ 15 апреля 2010

У меня очень странная проблема. Когда я выполняю определенную хранимую процедуру базы данных из 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 были отключены для устранения этой проблемы.

1 Ответ

0 голосов
/ 16 апреля 2010

Я видел это однажды, когда загружал XML через сохраненный процесс только с одной рабочей станции

Мы изменили сетевой кабель (который в нашем большом здании проложен по-другому), и он заработал.

Как бы странно это не звучало, можете ли вы каким-то образом перемонтировать сервер, заменить кабели или обойти коммутатор и т. Д.

...