الطريقة الصحيحة لقيم قاعدة البيانات خدمة Unbox

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

  •  20-09-2019
  •  | 
  •  

سؤال

وأنا أعمل مع قاعدة بيانات أوراكل القديمة، وأشعر هناك على الأرجح أفضل طريقة للذهاب نحو علبته القيم I استرداد من قاعدة البيانات.

وحاليا، لدي فئة ثابت كاملة لمختلف أساليب نوع خاص:

public static int? Int(object o)
{
    try
    {
        return (int?)Convert.ToInt32(o);
    }
    catch (Exception)
    {
        return null;
    }
}

و.. وهلم جرا لأنواع مختلفة، ولكن أشعر أن تكون هناك طريقة أفضل؟ إذا كنت تريد خدمة Unbox قيمة، أفعل شيئا على غرار ...

و

int i;
i = nvl.Int(dataRow["column"]); //In this instance, "column" is of a numeric database type

وأنا فكرت باستخدام فئة عامة للتعامل مع جميع أنواع مختلفة، ولكن لم أستطع حقا معرفة أفضل طريقة للذهاب نحو ذلك.

وأي أفكار؟

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

المحلول

وأجد طرق مساعفة مثل مفيدة التالية في السيناريو الخاص بك - اختبار لDBNULL هو أكثر كفاءة من اصطياد استثناء كما هو الحال في المثال الخاص بك:

public static MyHelper
{
    public static Nullable<T> ToNullable<T>(object value) where T : struct
    {
        if (value == null) return null;
        if (Convert.IsDBNull(value)) return null;
        return (T) value;
    }

    public static string ToString(object value)
    {
        if (value == null) return null;
        if (Convert.IsDBNull(value)) return null;
        return (string)value;
    }
}

وهذا يعمل من أجل سلسلة وأنواع القيمة البدائية المعتادة التي سوف تواجه (كثافة العمليات، عشري، وضعف، منطقي، التاريخ والوقت).

وانها مختلفة قليلا من المثال الخاص بك لأنه يلقي بدلا من المتحولين - ولكن شخصيا انا افضل هذا. أي. إذا كان العمود قاعدة البيانات NUMERIC (عشري)، ويهمني أن يكون بدلا من صريح إذا أردت أن تحويل القيمة إلى كثافة العمليات، منها مثلا:

int? myIntValue = (int?) MyHelper.ToNullable<decimal>(reader["MyNumericColumn"]);

نصائح أخرى

ويمكنك تقديم دروس نموذجية بسيطة وخريطة بينهما.

وعلى سبيل المثال:

public class Customer
{
   public Customer(DataRow row) 
   {
      Name = row["Name"];
   }
   public Name { get; private set; }
}

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

واعتمادا على الجهد الذي تريد أن تنفق، هل يمكن أن تذهب واستخدام مخطط ORM NHibernate.

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