C#访问Access表结构,查询表列信息

来源:互联网 发布:映射网络驱动器端口号 编辑:程序博客网 时间:2024/06/18 06:10

access不像sqlserver,oracle有提供直接的系统表,可以查询相关表的列信息,因此直接用sql无法查找到相关信息,需要通过程序实现。

代码如下:


public static DataSet GetOleDbColumns(DBlink dbLink, string tableName)        {            DBHelperOleDb.connectionString = dbLink.linkConnStr;            DataTable dtKey = DBHelperOleDb.GetPrimaryInfo(tableName);//获取主键信息            DataTable result = DBHelperOleDb.GetColumnInfo(tableName);//获取列信息            DataTable dt = new DataTable();            dt.Columns.Add(new DataColumn("tableName", typeof(string)));            dt.Columns.Add(new DataColumn("tableDescription", typeof(string)));            dt.Columns.Add(new DataColumn("colOrder", typeof(string)));            dt.Columns.Add(new DataColumn("columnName", typeof(string)));            dt.Columns.Add(new DataColumn("IsIdentity", typeof(string)));            dt.Columns.Add(new DataColumn("IsPrimaryKey", typeof(string)));            dt.Columns.Add(new DataColumn("TypeName", typeof(string)));            dt.Columns.Add(new DataColumn("Length", typeof(string)));            dt.Columns.Add(new DataColumn("Precision", typeof(string)));            dt.Columns.Add(new DataColumn("Scale", typeof(string)));            dt.Columns.Add(new DataColumn("Nullable", typeof(string)));            dt.Columns.Add(new DataColumn("DefaultVal", typeof(string)));            dt.Columns.Add(new DataColumn("Description", typeof(string)));            foreach (DataRow row in result.Rows)            {                DataRow r = dt.NewRow();                r["tableName"] = row["TABLE_NAME"].ToString();                r["tableDescription"] = row["TABLE_CATALOG"].ToString();                r["colOrder"] = row["ORDINAL_POSITION"].ToString();//                r["columnName"] = row["COLUMN_NAME"].ToString();                r["IsIdentity"] = false;//还未找到对应项                r["IsPrimaryKey"] = dtKey.Select(string.Format("COLUMN_NAME='{0}'", row["COLUMN_NAME"].ToString())).Length > 0 ? true : false;//是否是主键                r["TypeName"] = row["DATA_TYPE"].ToString();                r["Length"] = row["CHARACTER_MAXIMUM_LENGTH"].ToString();                r["Precision"] = row["NUMERIC_PRECISION"].ToString();                r["Scale"] = row["NUMERIC_SCALE"].ToString();                r["Nullable"] = bool.Parse(row["IS_NULLABLE"].ToString());                r["DefaultVal"] = row["COLUMN_DEFAULT"].ToString();                r["Description"] = row["DESCRIPTION"].ToString();                dt.Rows.Add(r);            }            DataSet ds = new DataSet();            ds.Tables.Add(dt);            return ds;        }                 /// <summary>        /// 获取Access表列信息        /// </summary>        /// <returns></returns>        public static DataTable GetColumnInfo(string tableName)        {            //connectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=E:\Project\OrgCertificate\OrgCertificate\bin\Debug\OrgCertificateDB.mdb;User ID=;Password=;";            using (OleDbConnection connection = new OleDbConnection(connectionString))            {                connection.Open();                DataTable dt = connection.GetOleDbSchemaTable(OleDbSchemaGuid.Columns, new object[] { null, null });                DataView view = new DataView();                view.Table = dt;                view.RowFilter = string.Format("table_name='{0}'",tableName);                return view.ToTable();            }        }        /// <summary>        /// 获取Access表主键信息        /// </summary>        /// <param name="tableName"></param>        /// <returns></returns>        public static DataTable GetPrimaryInfo(string tableName)        {            using (OleDbConnection connection = new OleDbConnection(connectionString))            {                connection.Open();                DataTable dt = connection.GetOleDbSchemaTable(OleDbSchemaGuid.Primary_Keys, new object[] { null, null });                DataView view = new DataView();                view.Table = dt;                view.RowFilter = string.Format("table_name='{0}'", tableName);                return view.ToTable();            }        }

示例:和GetOleDbSchemaTable()差不多

DataTable dt = connection.GetOleDbSchemaTable(OleDbSchemaGuid.Columns, new object[] { null, null });

可以替换“Columns”的还有如下字段,来源网上(http://topic.csdn.net/u/20080918/12/fc76f127-87bc-46e4-b273-7da1ca514c2c.html),请自行验证。

MetaDataCollections 
DataSourceInformation 
DataTypes 
Restrictions 
ReservedWords 
Users 
Databases 
Tables 
Columns 
StructuredTypeMembers 
Views 
ViewColumns 
ProcedureParameters 
Procedures 
ForeignKeys 
IndexColumns 
Indexes 
UserDefinedTypes

OleDbSchemaGuid的类信息

public sealed class OleDbSchemaGuid    {        // Summary:        //     Returns the assertions defined in the catalog that is owned by a given user.        public static readonly Guid Assertions;        //        // Summary:        //     Returns the physical attributes associated with catalogs accessible from        //     the data source. Returns the assertions defined in the catalog that is owned        //     by a given user.        public static readonly Guid Catalogs;        //        // Summary:        //     Returns the character sets defined in the catalog that is accessible to a        //     given user.        public static readonly Guid Character_Sets;        //        // Summary:        //     Returns the check constraints defined in the catalog that is owned by a given        //     user.        public static readonly Guid Check_Constraints;        //        // Summary:        //     Returns the check constraints defined in the catalog that is owned by a given        //     user.        public static readonly Guid Check_Constraints_By_Table;        //        // Summary:        //     Returns the character collations defined in the catalog that is accessible        //     to a given user.        public static readonly Guid Collations;        //        // Summary:        //     Returns the columns defined in the catalog that are dependent on a domain        //     defined in the catalog and owned by a given user.        public static readonly Guid Column_Domain_Usage;        //        // Summary:        //     Returns the privileges on columns of tables defined in the catalog that are        //     available to or granted by a given user.        public static readonly Guid Column_Privileges;        //        // Summary:        //     Returns the columns of tables (including views) defined in the catalog that        //     is accessible to a given user.        public static readonly Guid Columns;        //        // Summary:        //     Returns the columns used by referential constraints, unique constraints,        //     check constraints, and assertions, defined in the catalog and owned by a        //     given user.        public static readonly Guid Constraint_Column_Usage;        //        // Summary:        //     Returns the tables that are used by referential constraints, unique constraints,        //     check constraints, and assertions defined in the catalog and owned by a given        //     user.        public static readonly Guid Constraint_Table_Usage;        //        // Summary:        //     Returns a list of provider-specific keywords.        public static readonly Guid DbInfoKeywords;        //        // Summary:        //     Returns a list of provider-specific literals used in text commands.        public static readonly Guid DbInfoLiterals;        //        // Summary:        //     Returns the foreign key columns defined in the catalog by a given user.        public static readonly Guid Foreign_Keys;        //        // Summary:        //     Returns the indexes defined in the catalog that is owned by a given user.        public static readonly Guid Indexes;        //        // Summary:        //     Returns the columns defined in the catalog that is constrained as keys by        //     a given user.        public static readonly Guid Key_Column_Usage;        //        // Summary:        //     Returns the primary key columns defined in the catalog by a given user.        public static readonly Guid Primary_Keys;        //        // Summary:        //     Returns information about the columns of rowsets returned by procedures.        public static readonly Guid Procedure_Columns;        //        // Summary:        //     Returns information about the parameters and return codes of procedures.        public static readonly Guid Procedure_Parameters;        //        // Summary:        //     Returns the procedures defined in the catalog that is owned by a given user.        public static readonly Guid Procedures;        //        // Summary:        //     Returns the base data types supported by the .NET Framework Data Provider        //     for OLE DB.        public static readonly Guid Provider_Types;        //        // Summary:        //     Returns the referential constraints defined in the catalog that is owned        //     by a given user.        public static readonly Guid Referential_Constraints;        //        // Summary:        //     Returns a list of schema rowsets, identified by their GUIDs, and a pointer        //     to the descriptions of the restriction columns.        public static readonly Guid SchemaGuids;        //        // Summary:        //     Returns the schema objects that are owned by a given user.        public static readonly Guid Schemata;        //        // Summary:        //     Returns the conformance levels, options, and dialects supported by the SQL-implementation        //     processing data defined in the catalog.        public static readonly Guid Sql_Languages;        //        // Summary:        //     Returns the statistics defined in the catalog that is owned by a given user.        public static readonly Guid Statistics;        //        // Summary:        //     Returns the table constraints defined in the catalog that is owned by a given        //     user.        public static readonly Guid Table_Constraints;        //        // Summary:        //     Returns the privileges on tables defined in the catalog that are available        //     to, or granted by, a given user.        public static readonly Guid Table_Privileges;        //        // Summary:        //     Describes the available set of statistics on tables in the provider.        public static readonly Guid Table_Statistics;        //        // Summary:        //     Returns the tables (including views) defined in the catalog that are accessible        //     to a given user.        public static readonly Guid Tables;        //        // Summary:        //     Returns the tables (including views) that are accessible to a given user.        public static readonly Guid Tables_Info;        //        // Summary:        //     Returns the character translations defined in the catalog that is accessible        //     to a given user.        public static readonly Guid Translations;        //        // Summary:        //     Identifies the trustees defined in the data source.        public static readonly Guid Trustee;        //        // Summary:        //     Returns the USAGE privileges on objects defined in the catalog that are available        //     to or granted by a given user.        public static readonly Guid Usage_Privileges;        //        // Summary:        //     Returns the columns on which viewed tables depend, as defined in the catalog        //     and owned by a given user.        public static readonly Guid View_Column_Usage;        //        // Summary:        //     Returns the tables on which viewed tables, defined in the catalog and owned        //     by a given user, are dependent.        public static readonly Guid View_Table_Usage;        //        // Summary:        //     Returns the views defined in the catalog that is accessible to a given user.        public static readonly Guid Views;        // Summary:        //     Initializes a new instance of the System.Data.OleDb.OleDbSchemaGuid class.        public OleDbSchemaGuid();    }