سؤال

في طلبي ASP MVC أنا باستخدام SQL القياسية (بدلا من أن LINQ إلى SQL أو غيرها من ORM) للاستعلام قاعدة البيانات الخاصة بي.

وأود أن تمرير نتائج قاعدة البيانات إلى جهة نظري وأعاد على النتائج في وجهة نظري. لكنني لست متأكدا من كيفية القيام بذلك. كل سبيل المثال رأيت يمر بعض سلسلة أو استخدامات L2S. وأود أن يمر شيء من هذا القبيل Hashtables متداخلة، ولكن الشيء الوحيد الذي يمكنني أن أفكر هو لتمرير كائن SqlDataReader إلى العرض، ولكن هذا يبدو وكأنه فكرة سيئة حقا.

وكيف أذهب حول عرض نتائج قاعدة البيانات الخاصة بي من استعلام SQL القياسية لجهة نظري؟ أود حقا استخدام ينق أو غيرها من ORM، ولكن متطلبات تملي علينا لا (لا تسألني لماذا، أنا لا أفهم). أنا أفعل هذا في VB. سأحاول من قبل أفضل لتحويل أي C # أمثلة لذلك.

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

المحلول

هل يمكن إنشاء فصول بسيطة للبيانات التي تريد نقلها ثم تعبئة قائمة الكائنات في جهاز تحكم من قارئ البيانات يدويا، ومن ثم تمرير هذا إلى العرض الخاص بك - على سبيل المثال (C # ولكن هذا يجب أن يكون من السهل تحويل)

// open your connection / datareader etc.

List<Customer> customers = new List<Customer>();

while(dataReader.Read())
{
 Customer c = new Customer();
 c.Id = dataReader.GetInt32(0);
 c.Name = dataReader.GetString(1);
 // etc (you might want to use string indexers instead of ints for the get methods)

 customers.Add(c);
}

// close and dispose your datareader / connection etc as usual

return View("List", customers);

نصائح أخرى

وMVC عبارة عن فصل الاهتمامات. يمر SqlDataReaders، DataTables، أو أيا كان من الدرجة التي تتواجد في مساحة الاسم System.Data إلى وجهة نظر ليست فكرة جيدة. تحتاج إلى تعريف نموذج التي قد تحدث مع قاعدة البيانات، وحدة تحكم والذي سيمر هذا النموذج إلى طريقة العرض. إذا قالت سياسة الشركة الخاصة بك لا تستخدم ORM ثم ربما لدت WebForms الكلاسيكي وأكثر ملاءمة لالسيناريو الخاص بك من نمط MVC.

وأنا أتفق مع Rashack. يشرح هذا المقال في بعض التفاصيل. ربط النص

في حال قيامها، وهنا كيفية القيام بذلك باستخدام DataTable ووDataReader:

private DataTable GetData()
{
    DataTable dt = new DataTable();

    using (SqlConnection connection
             = new SqlConnection("ConnectionString"))
    using (SqlCommand command = new SqlCommand())
    {
        command.Connection = connection;
        command.CommandText = "SELECT * FROM Customers";

        connection.Open();
        using (SqlDataReader reader =
            command.ExecuteReader
                (CommandBehavior.CloseConnection))
        {
            dt.Load(reader);
        }
    }

    return dt;
}

وبعد ذلك، يمكن أن تقرأ هذا DataTable وإلى كائن الكيان الذي يمكنك تمرير حولها.

وأعتقد أنك ستجد هذا يمكن أن يحقق أداء أفضل بكثير من استخدام ينق أو ORM.

وحاول استخدام DataTables - DataTable ويمكن تحميل البيانات من IDataReader ... (على ما أظن دعا تحميل طريقة ل)

هل يمكن إنشاء كائن نقل البيانات الصفوف وتجميع حالات لهم باستخدام ADO. كود صافي. ومن شأن هذه الطبقات DTO يكون POCO الطبقات على غرار التي تحتوي على مجرد الحصول على الملكية / مجموعة من يمكنهم الدخول، لا طرق. باستخدام كائنات POCO من الأفضل القول أن وحدات DataSet / DataTables كما أنها خفيفة الوزن (أي دولة زائدة) وأكثر بديهية للعمل مع من وجهة نظر وجوه المنحى.

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