⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 metadatadbprovider.cs

📁 EpiInfo 开源的导航系统远程序,不知道在哪里下的了,分享一下,有兴趣的
💻 CS
📖 第 1 页 / 共 5 页
字号:
using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Data.Common;
using System.Drawing;
using System.IO;
using System.Text;
using System.Text.RegularExpressions;
using Epi.Collections;
using Epi;
using Epi.Data;
using Epi.DataSets;
using Epi.Fields;
using Epi.Resources;

namespace Epi.Data.Services
{
    /// <summary>
    /// Database implementation of Metadata provider
    /// </summary>
    public class MetadataDbProvider : IMetadataProvider
    {
        #region MetadataProvider Database Members

        /// <summary>
        /// Creates a database
        /// </summary>
        /// <param name="dbInfo"></param>
        protected void CreateDatabase(DbDriverInfo dbInfo)
        {
            dbFactory.CreatePhysicalDatabase(dbInfo);
            //db.CreateDatabase(databaseName);
        }

        //[Obsolete("Use of DataTable in this context is no different than the use of a multidimensional System.Object array (not recommended).", false)]
        //public DataTable GetCodeTableColumnSchema(string tableName)
        //{
        //    Util.Assert(tableName.StartsWith("meta") == false);
        //    return db.GetTableColumnSchema(tableName);
        //}

        public DataTable GetCodeTableData(string tableName)
        {
            Util.Assert(tableName.StartsWith("meta") == false);
            return db.GetTableData(tableName);
        }


        public DataTable GetCodeTableData(string tableName, string columnNames)
        {
            Util.Assert(tableName.StartsWith("meta") == false);
            return this.db.GetTableData(tableName, columnNames);
        }

        public DataTable GetCodeTableData(string tableName, string columnNames, string sortCriteria)
        {
            return this.db.GetTableData(tableName, columnNames, sortCriteria);
        }

        #endregion

        #region Fields
        private Project project;
        /// <summary>
        /// The unerlying physical databsae
        /// </summary>
        //protected IDbDriver db;
        public IDbDriver db;
        private IDbDriverFactory dbFactory;
        #endregion Fields

        #region Events
        public event ProgressReportBeginEventHandler ProgressReportBeginEvent;
        private void RaiseProgressReportBeginEvent(int min, int max, int step)
        {
            if (this.ProgressReportBeginEvent != null)
            {
                this.ProgressReportBeginEvent(min, max, step);
            }
        }

        public event ProgressReportUpdateEventHandler ProgressReportUpdateEvent;
        private void RaiseProgressReportUpdateEvent()
        {
            if (this.ProgressReportUpdateEvent != null)
            {
                this.ProgressReportUpdateEvent();
            }
        }

        public event SimpleEventHandler ProgressReportEndEvent;
        private void RaiseProgressReportEndEvent()
        {
            if (this.ProgressReportEndEvent != null)
            {
                this.ProgressReportEndEvent();
            }
        }

        #endregion Events


        #region Constructors

        /// <summary>
        /// Constructor for the class.
        /// </summary>
        /// <param name="proj">Project the metadata belongs to</param>
        //public MetadataDbProvider(Project proj, bool createDatabase) 
        public MetadataDbProvider(Project proj)
        {
            #region Input validation
            if (proj == null)
                throw new System.ArgumentNullException("proj");
            #endregion Input validation
            project = proj;

            ////KKM4 TODO: Check if the metadata source is Database. Assume it is for now.
            //string connectionString = proj.MetadataConnectionString;
            //if (!string.IsNullOrEmpty(connectionString))
            //{
            //    if (Util.IsFilePath(connectionString) && !Path.IsPathRooted(connectionString))
            //    {
            //        connectionString = Path.Combine(proj.Location, connectionString);
            //    }
            //    db = DatabaseFactory.CreateDatabaseInstance(proj.MetadataDriver, connectionString);
            //}

            //if (createDatabase)
            //{
            //    this.CreateDatabase(new ConnectionStringInfo(connectionString).DbName);
            //    CreateMetadataTables();
            //}
            //else
            //{
            //    // if you've come this far, the connection string should be valid
            //    db.TestConnection();
            //}
        }

        public void Initialize(DbDriverInfo MetaDbInfo, string driver, bool createDatabase)
        {

            dbFactory = DbDriverFactoryCreator.GetDbDriverFactory(driver);
            if (createDatabase)
            {
                this.CreateDatabase(MetaDbInfo); //\\ + Path.DirectorySeparatorChar + DbDriverInfo.PreferredDatabaseName);
                db = dbFactory.CreateDatabaseObject(MetaDbInfo.DBCnnStringBuilder);
                CreateMetadataTables();
            }
            else
            {

                db = dbFactory.CreateDatabaseObject(MetaDbInfo.DBCnnStringBuilder);

            }
            db.TestConnection();
        }

        ///// <summary>
        ///// Creates database from the connectionstring.
        ///// </summary>
        ///// <param name="connectionString"></param>
        ///// <param name="driver"></param>
        ///// <param name="createDatabase"></param>
        //public void Initialize(string connectionString, string driver, bool createDatabase)
        //{

        //    dbFactory = DatabaseFactoryCreator.GetDbDriverFactory(driver);
        //    DbConnectionStringBuilder cnnStringBuilder = new DbConnectionStringBuilder();
        //    cnnStringBuilder.ConnectionString = connectionString;
        //    if (createDatabase)
        //    {
        //        this.CreateDatabase(new ConnectionStringInfo(connectionString).DbName);
        //        CreateMetadataTables();
        //    }
        //    else
        //    {

        //        db = dbFactory.CreateDatabaseObject(cnnStringBuilder);

        //    }
        //    //db = DatabaseFactoryCreator.CreateDatabaseInstance(driver, connectionString);




        //    //if (createDatabase)
        //    //{
        //    //    this.CreateDatabase(new ConnectionStringInfo(connectionString).DbName);
        //    //    CreateMetadataTables();
        //    //}
        //    db.TestConnection();

        //}

        #endregion Constructors

        #region Public Properties

        /// <summary>
        /// The project
        /// </summary>
        public Project Project
        {
            get
            {
                return project;
            }
        }
        /// <summary>
        /// MetaData DBFactory
        /// </summary>
        public IDbDriverFactory DBFactory
        {
            get { return dbFactory; }
        }


        #endregion Public Properties

        #region Public Methods

        /// <summary>
        /// Gets list of code tables in the metadata database
        /// </summary>
        /// <returns>DataRow of table names</returns>
        public DataSets.TableSchema.TablesDataTable GetCodeTableList()
        {
            try
            {

                DataSets.TableSchema.TablesDataTable tables = db.GetTableSchema();

                DataRow[] rowsFiltered = tables.Select("TABLE_NAME NOT LIKE 'code%'");
                foreach (DataRow rowFiltered in rowsFiltered)
                {
                    tables.Rows.Remove(rowFiltered);
                }
                return tables;
            }
            catch (Exception ex)
            {
                throw new System.ApplicationException("Could not retrieve code tables from database", ex);
            }
        }

        /// <summary>
        /// Attaches a db driver object to this provider.
        /// </summary>
        /// <param name="dbDriver"></param>
        public void AttachDbDriver(IDbDriver dbDriver)
        {
            this.db = dbDriver;
        }
        
        #region Select Statements

        /// <summary>
        /// Gets all views belonging to a project
        /// </summary>
        /// <returns>Datatable containing view info</returns>
        public virtual DataTable GetViewsAsDataTable()
        {
            try
            {
                Query query = db.CreateQuery(
                    @"SELECT [ViewId], [Name], [CheckCodeBefore], [CheckCodeAfter], [RecordCheckCodeBefore], 
                    [RecordCheckCodeAfter], [CheckCodeVariableDefinitions], [IsRelatedView] 
					FROM metaViews"
                    );
                //query.Parameters.Add(new DbParameter("@ProjectId", DbType.Guid, Project.Id));			
                return db.Select(query);
            }
            catch (Exception ex)
            {
                throw new GeneralException("Could not retrieve view data table", ex);
            }
        }

        /// <summary>
        /// Gets all views belonging to a project
        /// </summary>
        /// <returns>A collection of views</returns>
        public ViewCollection GetViews()
        {
            try
            {
                Collections.ViewCollection views = new Collections.ViewCollection();
                DataTable table = GetViewsAsDataTable();
                foreach (DataRow row in table.Rows)
                {
                    views.Add(new View(row, project));
                }
                return views;
            }
            catch (Exception ex)
            {
                throw new GeneralException("Could not retrieve view collection", ex);
            }
        }
        /*
                /// <summary>
                /// Gets all pages belonging to the project
                /// </summary>
                /// <returns>Datatable containing page info</returns>
                public DataTable GetPagesForProject()
                {
                    try
                    {
                        DbQuery query = db.CreateQuery("SELECT P.[PageId], V.[ViewId], P.[Name] AS PageName, V.[Name] AS ViewName, P.[Position] " +

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -