مشكلة إدخال السلسلة أو null في قاعدة بيانات SQL Server
سؤال
قرأت للتو الجواب الأعلى في هذا المنشور:
مشكلة إدخال السلسلة أو 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]);
عيب فقط هو أنه سيفعل القاموس بحث مرتين!