مشكلة إدخال السلسلة أو null في قاعدة بيانات SQL Server

StackOverflow https://stackoverflow.com/questions/594176

  •  09-09-2019
  •  | 
  •  

سؤال

قرأت للتو الجواب الأعلى في هذا المنشور:
مشكلة إدخال السلسلة أو null في قاعدة بيانات SQL Server

يصححني إذا كنت مخطئا، ولكن هل لا يمكن استخدام المشغل فقط على متغيرين من نفس النوع، إن لم يكن يقدر ذلك كثيرا، إذا كان أي شخص يمكن أن يحل مشكلتي الثانوية.

حاولت إدراج بعض الكود في مشروعي مماثلة للواحد أدناه.

Dictionary<string, string> strings = new Dictionary<string, string>()
{
    {"@param0", strParam0},
    {"@param1", strParam1},
    {"@param2", strParam2}
};
foreach (string param in strings.Keys)
{
    cmd.Parameters.AddWithValue(param, strings[param] ?? DBNull.Value);
}

لكن Visual Studio يشكو من الرسالة التالية:
"المشغل أو العامل '؟؟' لا يمكن تطبيقها على المعاملات من النوع "السلسلة" و "system.dbnull" "

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

المحلول

DBNULL و NULL ليس بنفس النوع، ولا أنواع أو أنواع مرجعية و DBNull. يمكنك فقط استخدام؟ مع قيم نفس النوع.

يمكن للمرء التفكير في؟ المشغل باسم السكر النحوي ل:

(left != null) ? left : right

وتتطلب العملية القصيرة على حد سواء من اليسار والحق في نفس النوع، وبالتالي فإن اليسار واليمين في؟ يجب أن يكون المشغل أيضا من نفس النوع.

لذلك، لسوء الحظ، لا .. لا يمكنك القيام بذلك بهذه الطريقة، على الأقل ليس دون بعض الصب القبيح.

نصائح أخرى

يحاول:

cmd.Parameters.AddWithValue(param, (object)strings[param] ?? DBNull.Value);
    cmd.Parameters.AddWithValue(param, strings[param] == null ? DBNull.Value : strings[param]);

عيب فقط هو أنه سيفعل القاموس بحث مرتين!

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