Пример #1
0
        /// <summary>
        /// トリガーのスクリプト作成
        /// </summary>
        /// <param name="scrp">出力するスクリプトの設定</param>
        /// <param name="db">データベース</param>
        /// <param name="csvDataList">CSV情報</param>
        /// <param name="appendFile">追記指示</param>
        private static void CreateScriptTrigger(Scripter scrp, Database db, List <CsvData> csvDataList, bool appendFile)
        {
            // T = トリガー の場合
            var objectTypeName = "Trigger";

            foreach (var tr in db.Triggers)
            {
                // 対象オブジェクト情報を設定
                var targetObjectInfo = new CsvData();

                // スクリプト情報を取得
                StringCollection sc = null;

                if (tr is DatabaseDdlTrigger)
                {
                    var ddlTrigger = tr as DatabaseDdlTrigger;

                    if (ddlTrigger.IsSystemObject)
                    {
                        // システムオブジェクトの場合は、対象外
                        continue;
                    }

                    targetObjectInfo.OwnerName  = string.Empty;
                    targetObjectInfo.ObjectName = ddlTrigger.Name;

                    objectTypeName = "DdlTrigger";

                    // スクリプト情報を設定
                    sc = scrp.Script(new Urn[] { ddlTrigger.Urn });
                }

                if ((string.IsNullOrEmpty(targetObjectInfo.OwnerName)) && (string.IsNullOrEmpty(targetObjectInfo.ObjectName)))
                {
                    continue;
                }

                if (!csvDataList.Any(x => x.ObjectName == targetObjectInfo.ObjectName))
                {
                    // CSVに該当データなし
                    continue;
                }

                if (null == sc)
                {
                    // CSVに該当データなし
                    continue;
                }

                // スクリプト作成
                CreateScript(db.Name, objectTypeName, targetObjectInfo, sc, appendFile);
            }
        }
Пример #2
0
        /// <summary>
        /// スクリプト作成
        /// </summary>
        /// <param name="dbName">DB名</param>
        /// <param name="objectTypeName">オブジェクトタイプ名</param>
        /// <param name="targetObjectInfo">対象オブジェクト情報</param>
        /// <param name="sc">スクリプト情報</param>
               /// <param name="appendFile">追記指示</param>
        /// <returns>実行結果(true:正常)</returns>
        private static bool CreateScript(string dbName, string objectTypeName, CsvData targetObjectInfo, StringCollection sc, bool appendFile)
        {
            var sbScriptData = new StringBuilder();

            sbScriptData.AppendFormat("/****** Object:  {3} [{0}].[{1}]  Script Date:{2} ******/"
                                      , targetObjectInfo.OwnerName
                                      , targetObjectInfo.ObjectName
                                      , System.DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss")
                                      , objectTypeName
                                      );
            sbScriptData.AppendLine();

            foreach (var st in sc)
            {
                sbScriptData.AppendLine(st);
                sbScriptData.AppendLine("GO");
            }
            var txtScript = sbScriptData.ToString();

            if (string.IsNullOrEmpty(txtScript))
            {
                return(false);
            }

            // 所有者があるオブジェクトのみ、所有者を設定する
            var ownerName = targetObjectInfo.OwnerName;

            if (!string.IsNullOrEmpty(ownerName))
            {
                ownerName += ".";
            }

            var outputPath = _pathAssembly + "\\"
                             + string.Format("{0}{1}.{2}.sql", ownerName, targetObjectInfo.ObjectName, objectTypeName);

            //書き込むファイルが既に存在している場合は、上書きする
            using (var sw = new System.IO.StreamWriter(outputPath, appendFile))
            {
                sw.Write(txtScript);
            }

            _outputScriptCount++;

            return(true);
        }
Пример #3
0
        /// <summary>
        /// テーブルトリガーのスクリプト作成
        /// </summary>
        /// <param name="scrp">出力するスクリプトの設定</param>
        /// <param name="db">データベース</param>
        /// <param name="csvDataList">CSV情報</param>
        /// <param name="appendFile">追記指示</param>
        private static void CreateScriptTableTrigger(Scripter scrp, Database db, List <CsvData> csvDataList, bool appendFile)
        {
            // TT = テーブルトリガー の場合
            var objectTypeName = "TableTrigger";

            foreach (Table table in db.Tables)
            {
                foreach (Trigger tr in table.Triggers)
                {
                    // スクリプト情報を取得
                    StringCollection sc = null;

                    // 対象オブジェクト情報を設定
                    var targetObjectInfo = new CsvData();
                    targetObjectInfo.ObjectName = table.Owner;
                    targetObjectInfo.ObjectName = tr.Name;

                    if (tr.IsSystemObject)
                    {
                        // システムオブジェクトの場合は、対象外
                        continue;
                    }

                    if (!csvDataList.Any(x => x.ObjectName == targetObjectInfo.ObjectName))
                    {
                        // CSVに該当データなし
                        continue;
                    }

                    // スクリプト情報を設定
                    sc = scrp.Script(new Urn[] { tr.Urn });

                    if (null == sc)
                    {
                        // CSVに該当データなし
                        continue;
                    }

                    // スクリプト作成
                    CreateScript(db.Name, objectTypeName, targetObjectInfo, sc, appendFile);
                }
            }
        }
Пример #4
0
        /// <summary>
        /// パラメータ判定
        /// </summary>
        /// <param name="logger">ロガー</param>
        /// <param name="objectType">オブジェクトタイプ</param>
        /// <param name="csvFilePath">CSVファイルのパス</param>
        /// <param name="csvDataList">CSVデータリスト</param>
        /// <returns>実行結果(true:正常)</returns>
        private static bool JudgeParameter(ILog logger, string objectType, string csvFilePath, List <CsvData> csvDataList)
        {
            #region 第1:オブジェクトタイプ
            {
                if ("U" == objectType)
                {
                    // U = テーブル(ユーザー定義)
                }
                else if ("V" == objectType)
                {
                    // V = ビュー の場合
                }
                else if ("P" == objectType)
                {
                    // P = ストアド プロシージャ の場合
                }
                else if ("F" == objectType)
                {
                    // F = ユーザー定義関数 の場合
                }
                else if ("TT" == objectType)
                {
                    // TT = テーブルトリガー の場合
                }
                else if ("T" == objectType)
                {
                    // T = トリガー の場合
                }
                else
                {
                    var errMessage = string.Format("想定外のオブジェクトタイプです。オブジェクトタイプ[{0}]", objectType);
                    logger.Error(errMessage);
                    System.Console.WriteLine(errMessage);
                    return(false);
                }
            }
            #endregion

            #region 第2:ファイルパス
            {
                if (string.IsNullOrEmpty(csvFilePath))
                {
                    var errMessage = "CSVのファイルパスが指定されていません。";
                    logger.Error(errMessage);
                    System.Console.WriteLine(errMessage);
                    return(false);
                }

                if (!File.Exists(csvFilePath))
                {
                    var errMessage = "CSVのファイルが存在しません。";
                    logger.Error(errMessage);
                    System.Console.WriteLine(errMessage);
                    return(false);
                }

                // CSVファイル読み込み
                using (var sw = new StreamReader(csvFilePath, false))
                {
                    var line = string.Empty;
                    while ((line = sw.ReadLine()) != null)
                    {
                        if (string.IsNullOrEmpty(line))
                        {
                            continue;
                        }

                        var lineDatas = line.Split(',');

                        if (2 != lineDatas.Count())
                        {
                            continue;
                        }

                        var csvData = new CsvData();
                        csvData.OwnerName  = lineDatas[0];
                        csvData.ObjectName = lineDatas[1];
                        csvDataList.Add(csvData);
                    }
                }
            }
            #endregion

            return(true);
        }