الإرسال أو التحويل عند استرداد البيانات من قاعدة البيانات؟

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

  •  05-07-2019
  •  | 
  •  

سؤال

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

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

المحلول

سأختار دائمًا للأسباب التي ذكرتها.المشاكل التي أعلم أنك بحاجة إلى التعامل معها هي:

  1. من الواضح أنك بحاجة إلى أن تكون قادرًا على التعامل مع DBNulls (على سبيل المثال.عن طريق الاختبار باستخدام Convert.IsDBNull)

  2. في حالة ExecuteScalar أعتقد أنك بحاجة إلى التحقق من وجود null وكذلك DBNull.

  3. تقوم خوادم SQL @@IDENTITY وSCOPE_IDENTITY بإرجاع أرقام رقمية (عشرية) حتى بالنسبة للأعمدة التي تم تعريفها على أنها INT.في هذه الحالة، يمكنك إرسال قيمة "(int)(عشرية)" مرتين أو التعامل معها في كود T-SQL، على سبيل المثال:.

    إدراج في MyTable ...حدد AutoIdColumn من MyTable حيث AutoIdColumn = SCOPE_IDENTITY()

أو

INSERT INTO MyTable ...
SELECT CAST(SCOPE_IDENTITY() AS INT)

نصائح أخرى

كلاهما CAST و CONVERT يتم استخدامها بشكل صريح لتحويل تعبير من نوع بيانات إلى آخر.ومع ذلك، مع CONVERT يمكنك تحديد شكل الاسلوب كذلك.

بناء جملة CAST:

CAST ( expression AS data_type [ (length ) ])

بناء الجملة للتحويل:

CONVERT ( data_type [ ( length ) ] , expression [ , style ] )

عند retreiving من RDBMS يجب أن تسمح مقبض تشغيل قاعدة بيانات التنظيم بين نوع الأصلي والطلب.

وويعاقب وفقا للمعايير CAST SQL ويعمل على أكبر عدد من منصات RDBMS.

وCONVERT متوافرة على عدد أقل من المنصات.

إذا كان لديك ينبغي أن تستخدم منصة متعددة conciderations CONVERT فقط للحالات الخاصة مثل التنسيق المخصصة التي لا يمكن أن يتحقق مع CAST.

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