سؤال

أنا أقرأ مخطط قاعدة البيانات لقاعدة بيانات VistadB 4.0 باستخدام API ADO.NET القياسية dbconnection.getschema '. لم أجد طريقة للحصول على إعداد "الهوية" لعمود؟ لا يبدو أن مجموعة مخطط "الأعمدة" تحتوي على عمود لهذا ، وأنا لست على دراية بأي مجموعة أخرى يجب أن أبحث عنها.

إذا لم يكن ذلك ممكنًا عن طريق الاستعلام عن أي من المجموعات المتاحة ، هل يجب علي الاستعلام عن بعض جدول النظام أو العرض؟

سيكون موضع تقدير أي مساعدة.

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

المحلول

لا توجد طاولات "sys" في vistadb. يوجد جدول [مخطط قاعدة البيانات] يحتوي على معظم ما تحتاجه.

مخطط قاعدة البيانات

يمكنك الحصول على أعمدة الهوية لقاعدة بيانات باستخدام جدول مخطط قاعدة البيانات مثل هذا:

select * from [database schema] where typeid = 6

ابحث في ملف المساعدة لقائمة typeid وماذا تعني.

ثم بمجرد حصولك على القائمة ، يمكنك مطابقة الأمر مع TypeID للجداول لمعرفة الجدول الذي جاء منه عمود الهوية.

الصيد الوحيد مع جدول مخطط قاعدة البيانات هو أنه لا يمكنك الرجوع إلى نفسه أو الانضمام إليه (الحد من التصميم). لذلك إذا كنت بحاجة إلى سحب والمرجع من نفسه ، فعليك القيام بذلك في أمرين ، أو من خلال جدول مؤقت. يحتوي ملف المساعدة على مثال على كيفية القيام بذلك أيضًا.

طريقة بديلة

يمكنك أيضًا العثور على جميع أعمدة الهوية باستخدام proc مخزنة لـ vistadb:

select * from VistaDBColumnSchema() where is_identity = true

DDA

إذا كنت بحاجة إلى العثور على القيمة التالية ، والبذور ، وما إلى ذلك ، يمكنك أيضًا الحصول على أساليب DDA (الوصول المباشر للبيانات).

خاصية الهويات على كائن ivistadbtableschema هي مجموعة من الهويات لهذا الجدول. يمكن بعد ذلك السير هذه المجموعة لسحب القيم الفردية.

معلومات الهوية المضمنة هي البذور ، الخطوة ، اسم TableName ، واسم العمود.

ADO.NET GETCHEMATABLE

ونعم ، لا تزال هناك طريقة أخرى. يمكنك استدعاء GetSchematable على القارئ للحصول على مزيد من المعلومات حول الهيكل الأساسي.

using (VistaDBConnection cn = new VistaDBConnection("Data Source=" + dbName))
{
    cn.Open();

    using (VistaDBCommand cmd = new VistaDBCommand("Select * from simpletable", cn))
    {
        using (VistaDBDataReader myReader = cmd.ExecuteReader(CommandBehavior.KeyInfo))
        {
            //Retrieve column schema into a DataTable.
            DataTable schemaTable = myReader.GetSchemaTable();

            foreach (DataRow myField in schemaTable.Rows)
            {
                foreach (DataColumn myProperty in schemaTable.Columns)
                {
                    System.Diagnostics.Debug.WriteLine(myProperty.ColumnName + " = " + myField[myProperty].ToString());
                }
            }
        }
    }
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top