سؤال

لدي مشكلة غريبة جدا. عندما أقوم بتنفيذ إجراءات قاعدة بيانات محددة من C# باستخدام sqlCommand.executenOnquery ، يتم تنفيذ الإجراء المخزن الخاص بي أبدًا.

علاوة على ذلك ، لا يقوم SQL Profiler بتسجيل الأمر على الإطلاق. لا أتلقى مهلة أمر ، ولم يتم إلقاء أي تنفيذي.

أغرب شيء هو أن هذا الرمز قد عمل بشكل جيد أكثر من 1200000 مرة ، لكن بالنسبة لهذا الملف المحدد ، أقوم بإدخال قاعدة البيانات ، فهو معلق إلى الأبد.

عندما أقتل التطبيق ، أتلقى هذا الخطأ في سجل حدث خادم قاعدة البيانات: "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 يقول خلاف ذلك.

أعلم أنه يتم تعيين أذونات Appropiate ، وأن سلسلة الاتصال صحيحة لأن هذا الجزء من الكود والإجراء المخزّن يعمل بشكل جيد مع الملفات الأخرى.

فيما يلي الرمز الذي يستدعي الإجراء المخزن ، قد يكون من المهم ملاحظة أن الملف الذي أحاول إدراجه هو 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 لاستكشاف هذه المشكلة.

هل كانت مفيدة؟

المحلول

لقد رأيت هذا مرة واحدة من قبل عند تحميل XML عبر بروك المخزنة من محطة عمل واحدة فقط

قمنا بتغيير كابل الشبكة (الذي تم توجيهه بشكل مختلف في المبنى الكبير لدينا) وقد نجح.

غريب كما يبدو هذا ، هل يمكنك إعادة تشغيل الخادم بطريقة أو بأخرى أو تغيير الكابلات أو تجاوز التبديل وما إلى ذلك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top