예제 #1
0
        private List <FileDataSet> FindDataFiles()
        {
            List <FileDataSet> list   = new List <FileDataSet>();
            ThirdDBConnection  config = SQLInAdapterConfigMgt.SQLInAdapterConfig.ThirdPartyInteractConfig.ConnectionParameter;

            if (config.IndexFileDriven)
            {
                string   iFolder = ConfigHelper.GetFullPath(config.IndexFileFolder);
                string[] iflist  = Directory.GetFiles(iFolder, config.FileNamePattern);
                Program.Log.Write(string.Format("Find {0} index file in folder {1}", iflist.Length, iFolder));

                foreach (string f in iflist)
                {
                    string   iFile            = ConfigHelper.GetFullPath(iFolder, f);
                    string   iFileName        = Path.GetFileNameWithoutExtension(iFile);
                    string   dFileNamePattern = string.Format("{0}.*", iFileName);
                    string   dFolder          = ConfigHelper.GetFullPath(config.FileFolder);
                    string[] dflist           = Directory.GetFiles(dFolder, dFileNamePattern);
                    if (dflist.Length < 1)
                    {
                        Program.Log.Write(LogType.Error,
                                          string.Format("Cannot find data file with pattern {0} in folder {1}",
                                                        dFileNamePattern, dFolder));
                        continue;
                    }

                    string      dFile = ConfigHelper.GetFullPath(dFolder, dflist[0]);
                    FileDataSet fds   = new FileDataSet();
                    fds.IndexFileLocation = iFile;
                    fds.DataFileLocation  = dFile;
                    fds.DataFileName      = Path.GetFileName(dFile);
                    Program.Log.Write(string.Format("Find data file named {0} from {1} with index file {2}",
                                                    fds.DataFileName, fds.DataFileLocation, fds.IndexFileLocation));

                    list.Add(fds);
                }
            }
            else
            {
                string   dFolder = ConfigHelper.GetFullPath(config.FileFolder);
                string[] dflist  = Directory.GetFiles(dFolder, config.FileNamePattern);
                Program.Log.Write(string.Format("Find {0} data file in folder {1}", dflist.Length, dFolder));

                foreach (string f in dflist)
                {
                    string      dFile = ConfigHelper.GetFullPath(dFolder, f);
                    FileDataSet fds   = new FileDataSet();
                    fds.DataFileLocation = dFile;
                    fds.DataFileName     = Path.GetFileName(dFile);
                    Program.Log.Write(string.Format("Find data file named {0} from {1}",
                                                    fds.DataFileName, fds.DataFileLocation));

                    list.Add(fds);
                }
            }
            return(list);
        }
예제 #2
0
        private void HandleDataFile(FileDataSet fds, bool success)
        {
            bool hasIndex = !string.IsNullOrEmpty(fds.IndexFileLocation);

            if (success)
            {
                if (hasIndex)
                {
                    Program.Log.Write("Deleting success file: " + fds.IndexFileLocation);
                    File.Delete(fds.IndexFileLocation);
                }
                Program.Log.Write("Deleting success file: " + fds.DataFileLocation);
                File.Delete(fds.DataFileLocation);
            }
            else
            {
                ThirdDBConnection config = SQLInAdapterConfigMgt.SQLInAdapterConfig.ThirdPartyInteractConfig.ConnectionParameter;
                if (config.MoveFileWhenError)
                {
                    string mFolder = ConfigHelper.GetFullPath(config.MoveFileFolder);
                    if (!Directory.Exists(mFolder))
                    {
                        Directory.CreateDirectory(mFolder);
                    }
                    if (hasIndex)
                    {
                        string mIFolder = Path.Combine(mFolder, "Index");
                        if (!Directory.Exists(mIFolder))
                        {
                            Directory.CreateDirectory(mIFolder);
                        }
                        string iFileName = Path.GetFileName(fds.IndexFileLocation);
                        string iFile     = Path.Combine(mIFolder, iFileName);
                        Program.Log.Write("Moving error index file to: " + iFile);
                        File.Move(fds.IndexFileLocation, iFile);
                    }
                    string mDFolder = Path.Combine(mFolder, "Data");
                    if (!Directory.Exists(mDFolder))
                    {
                        Directory.CreateDirectory(mDFolder);
                    }
                    string dFile = Path.Combine(mDFolder, fds.DataFileName);
                    Program.Log.Write("Moving error data file to: " + dFile);
                    File.Move(fds.DataFileLocation, dFile);
                }
                else
                {
                    if (hasIndex)
                    {
                        Program.Log.Write("Deleting error file: " + fds.IndexFileLocation);
                        File.Delete(fds.IndexFileLocation);
                    }
                    Program.Log.Write("Deleting error file: " + fds.DataFileLocation);
                    File.Delete(fds.DataFileLocation);
                }
            }
        }
예제 #3
0
        private void QueryDataToFile()
        {
            if (OnDataRequest == null || OnDataDischarge == null)
            {
                return;
            }
            ThirdDBConnection cfg = SQLOutAdapterConfigMgt.SQLOutAdapterConfig.ThirdPartyInteractConfig.ConnectionParameter;

            foreach (SQLOutboundChanel ch in SQLOutAdapterConfigMgt.SQLOutAdapterConfig.OutboundChanels)
            {
                try
                {
                    if (!ch.Enable)
                    {
                        continue;
                    }
                    if (ch.OperationType != ThrPartyDBOperationType.Table)
                    {
                        continue;
                    }
                    DataSet dsResult = OnDataRequest((IOutboundRule)ch.Rule, null);
                    int     count    = PrepareQueryResult(dsResult);
                    if (count < 1)
                    {
                        continue;
                    }

                    // generate file name

                    string fn             = RuleControl.GetRandomNumber();
                    string dataFileFolder = ConfigHelper.GetFullPath(cfg.FileFolder);
                    string csvFileName    = string.Format("{0}{1}", fn, cfg.FileNameExtension);
                    string tmpFileName    = string.Format("{0}{1}", fn, cfg.TempFileNameExtensin);

                    // create CSV file

                    List <string> idList = new List <string>();
                    if (!CreateDataFile(ch, tmpFileName))
                    {
                        continue;
                    }
                    if (!InsertDataFile(ch, tmpFileName, dsResult, idList, count))
                    {
                        continue;
                    }
                    Program.Log.Write("Creating data file: " + csvFileName);
                    File.Move(Path.Combine(dataFileFolder, tmpFileName), Path.Combine(dataFileFolder, csvFileName));

                    // delete INI file

                    if (!cfg.KeepSchemaFile)
                    {
                        string schameFilePath = Path.Combine(dataFileFolder, cfg.SchemaFileName);
                        Program.Log.Write("Deleting schema file: " + schameFilePath);
                        File.Delete(schameFilePath);
                    }

                    // create IDX file

                    if (cfg.WriteIndexFile)
                    {
                        string indexFileName   = string.Format("{0}.idx", fn);
                        string indexFileFolder = ConfigHelper.GetFullPath(cfg.IndexFileFolder);
                        string indexFilePath   = Path.Combine(indexFileFolder, indexFileName);
                        Program.Log.Write("Creating index file: " + indexFilePath);
                        if (!Directory.Exists(indexFileFolder))
                        {
                            Directory.CreateDirectory(indexFileFolder);
                        }
                        using (StreamWriter sw = File.CreateText(indexFilePath)) { }
                    }

                    OnDataDischarge(idList.ToArray());
                }
                catch (Exception err)
                {
                    Program.Log.Write(err);
                }
            }
        }