/// <summary> /// connStrで指定された接続文字列でデータベースに接続できるか判定する /// </summary> /// <param name="dbms">DBMSの種別</param> /// <param name="connStr">接続文字列</param> /// <returns></returns> /// <remarks></remarks> public static bool IsConnectable(SqlBuilder.DbmsType dbms , string connStr) { bool ret = false; Db aDb = null; DbConn aDbConn = null; try { aDb = new Db(dbms, connStr); aDbConn = aDb.CreateDbConn(); aDbConn.Dispose(); aDb.Dispose(); //接続、及び切断ができたら接続可と判定する ret = true; } catch (Exception ex) { //接続、又は切断時に例外が発生したら接続不可と判定する ret = false; } finally { if (aDbConn != null) { aDbConn.Dispose(); } if (aDb != null) { aDb.Dispose(); } } return(ret); }
public SqlPodDefinedByXml(string sqlPodXml, SqlBuilder.DbmsType dbms) { _sqlPodXml = sqlPodXml; _dbms = dbms; _lastWriteTime = File.GetLastWriteTime(sqlPodXml); this.LoadSqlPodXml(); }
public SqlBuilders(string sqlsStr , SqlBuilder.DbmsType dbmsType = SqlBuilder.DbmsType.Unknown , bool forSqlAccessor = true) : this(MiniSqlParserAST.CreateStmts(sqlsStr , SqlBuilder.ConvertDbmsType(dbmsType) , forSqlAccessor)) { }
private bool RegistColumnInfo(SqlBuilder.DbmsType dbms, string tableName) { //引数で指定された名称のテーブルが存在すれば(カラムのメタ情報が1件以上存在すれば)True bool tableExists = false; Query <ColumnInfo> aQuery = new Query <ColumnInfo>(); Dictionary <string, string> aPlaceHolders = new Dictionary <string, string>(); if (dbms == SqlBuilder.DbmsType.Sqlite) { //For SQLite aPlaceHolders.Add("SQLite_TableName_", tableName); } else { aQuery.And(val.of("TableName") == tableName); } using (Tran aTran = _aDb.CreateTranWithoutLock()) { //テーブルの全てのカラムのメタ情報を取得し、_columnInfoHashに格納する Reader <ColumnInfo> reader = aTran.Find(aQuery , aPlaceHolders , Tran.LoadMode.ReadOnly , Tran.CacheStrategy.NoCache); foreach (ColumnInfo aColumnInfo in reader) { //SQLiteのPRAGMA TABLE_INFO()の結果にテーブル名が含まれないので、ここで補う if (dbms == SqlBuilder.DbmsType.Sqlite) { aColumnInfo.TableName = tableName; } _columnInfoHash.Add(aColumnInfo.ColumnName, aColumnInfo); //主キーカラムの場合は_primaryKeysにも登録する if (aColumnInfo.PrimaryKey.HasValue && aColumnInfo.PrimaryKey.Value) { _primaryKeys.Add(aColumnInfo); } tableExists = true; } } //主キーカラムのないテーブルは、全てのカラムが主キーと見做す if (tableExists && _primaryKeys.Count == 0) { _primaryKeys.AddRange(_columnInfoHash.Values); } return(tableExists); }
/// <summary> /// /// </summary> /// <param name="splPodsPath">SqlPodsディレクトリのファイルパス /// (SqlAccessor.dllを基準とした相対パス指定)</param> /// <param name="dbms">DBMS種別</param> /// <remarks></remarks> public SqlPodFactory(string splPodsPath, SqlBuilder.DbmsType dbms) { //DBMS種別の設定 _dbms = dbms; //SqlPodsディレクトリは、自アセンブリファイルと同じディレクトリに配置される //注意!) C:\\はC:\と同じファイルパスではない。C:\\はネットワーク先のファイルパスを意味するらしい _sqlPodDirName = System.IO.Path.Combine( new System.IO.FileInfo( new Uri(this.GetType().Assembly.CodeBase).LocalPath ).DirectoryName , splPodsPath ); }
public RecordReaderImp(IResults aResults , ViewInfo aViewInfo , ICaster aCaster , SqlBuilder.DbmsType aDbms , Tran aTran) { _aResults = aResults; _aViewInfo = aViewInfo; _aCaster = aCaster; _aDbms = aDbms; _aTran = aTran; //レコードのメタ情報の取得 System.Type recordType = (new TRecord()).GetType(); _recordName = recordType.Name; _properties = recordType.GetProperties(); }
/// <summary> /// データベースに接続する /// </summary> /// <param name="dbms">DBMSの種別</param> /// <param name="connStr">接続文字列</param> /// <param name="dbParams">設定情報</param> public Db(SqlBuilder.DbmsType dbms , string connStr , DbParameters dbParams = null) { _dbms = dbms; _connStr = connStr; if (dbParams == null) { _params = new DbParameters(); } else { _params = (DbParameters)dbParams.Clone(); } //プールするDB接続を用意する _connections = new List <DbConn>(); for (int i = 0; i <= _params.ConnectionPool; i++) { _connections.Add(this.CreateDbConn()); } //キャッシュテーブルの作成 if (_params.Cache == DbParameters.CacheType.Null) { _aResultsCache = new NullResultsCache(); } else if (_params.Cache == DbParameters.CacheType.LRU) { _aResultsCache = new LruResultsCache(_params.CacheSize); } else if (_params.Cache == DbParameters.CacheType.MarkovLRU) { _aResultsCache = new MarkovResultsCache( new LruResultsCache(_params.CacheSize), this); } else { throw new InvalidEnumArgumentException("Undefined CacheType is used"); } //キャスターの生成 _aCaster = this.CreateCaster(); //SqlPodファクトリの生成 _aSqlPodFactory = new SqlPodFactory(_params.SqlPodsDir, _dbms); //テーブル情報の生成 _aTableInfoSet = new TableInfoSet(this); //レコードとテーブルのマッピング情報の生成 _aRecordViewTableMapFactory = new RecordViewTableMapFactory(this); //ロックマネージャの生成 //SQLiteの場合は、必ずSqliteLockManagerを使うこと if (_dbms == SqlBuilder.DbmsType.Sqlite) { _aLockManager = new SqliteLockManager(); } else if (_params.LockData == DbParameters.LockDataType.Memory) { _aLockManager = new MemLockManager(_aRecordViewTableMapFactory, _aCaster); } else if (_params.LockData == DbParameters.LockDataType.Db) { _aLockManager = new DbLockManager(_aRecordViewTableMapFactory, this); } else if (_params.LockData == DbParameters.LockDataType.Sqlite) { _aLockManager = new SqliteLockManager(); } else if (_params.LockData == DbParameters.LockDataType.Null) { _aLockManager = new NullLockManager(); } else { throw new InvalidEnumArgumentException("Undefined LockDataType is used"); } //SQL文発行ログの出力メソッドの作成 if (_params.Logger == DbParameters.LoggerType.Null) { _aLogger = new NullLogger(); } else if (_params.Logger == DbParameters.LoggerType.WindowsEventLog) { _aLogger = new WindowsEventLogger(); } else if (_params.Logger == DbParameters.LoggerType.Console) { _aLogger = new ConsoleLogger(); } else { throw new InvalidEnumArgumentException("Undefined LoggerType is used"); } }