/********************************************************************************************* * Copyright 2004 - Volian Enterprises, Inc. All rights reserved. * Volian Enterprises - Proprietary Information - DO NOT COPY OR DISTRIBUTE * ------------------------------------------------------------------------------ * $Workfile: vdb_TransUsage.cs $ $Revision: 7 $ * $Author: Kathy $ $Date: 5/01/06 11:17a $ * * $History: vdb_TransUsage.cs $ * * ***************** Version 7 ***************** * User: Kathy Date: 5/01/06 Time: 11:17a * Updated in $/LibSource/VDB * Fix B2006-018: single quote in proc number causes problem on data * request * * ***************** Version 6 ***************** * User: Kathy Date: 8/16/05 Time: 2:54p * Updated in $/LibSource/VDB * B2005-030: error if missing ndx * * ***************** Version 5 ***************** * User: Kathy Date: 4/21/05 Time: 10:20a * Updated in $/LibSource/VDB * always write inf file * * ***************** Version 4 ***************** * User: Kathy Date: 3/08/05 Time: 1:48p * Updated in $/LibSource/VDB * Approval * * ***************** Version 3 ***************** * User: Jsj Date: 8/30/04 Time: 12:16p * Updated in $/LibSource/VDB * upper cased WHERE string did not find mixed cased database items, now * use the WHERE string as it is passed in. * * ***************** Version 2 ***************** * User: Jsj Date: 8/23/04 Time: 10:13a * Updated in $/LibSource/VDB * Fixed replace of single quote * * ***************** Version 1 ***************** * User: Kathy Date: 7/27/04 Time: 8:40a * Created in $/LibSource/VDB *********************************************************************************************/ using System; using System.Data; using System.Text; using System.Collections.Specialized; using System.IO; using System.Windows.Forms; using VDB; using VDB_ConnType; namespace VDB_TransUsage { /// /// Open, Create, Delete, Update functions for Transition Usage files (tables) /// public class vdb_TransUsage:VDB_Base { public enum SortTypes {NotSorted,FromSort,ToSort}; // list of sorting types public string TransFromNDX = ""; public string TransToNDX = ""; public vdb_TransUsage(String strPath):base(strPath) { // if no table (file name) specified, then default to TRAN (TRAN.DBF) if (DBTable.Equals("")) DBTable = "TRAN"; } // Build a SQL statement. Optionally sort and filter the select statement. private void BuildSelectCommand(int SortingType,string WhereStr) { StringBuilder tmp = new StringBuilder(); tmp.Append("SELECT [FROMNUMBER],[FROMSEQUEN],[FROMINSTAN],[TYPE],"); tmp.Append("[TONUMBER],[TOSEQUENCE],[TOINSTANCE],[DTI],[OLDTO] FROM ["); tmp.Append(DBTable); tmp.Append("]"); if (WhereStr.Length > 0) // Was a WHERE clause passed in? { // Add " WHERE " to the beginning if it is not already there string tmpstr = WhereStr.ToUpper(); if (tmpstr[0] != ' ') { tmp.Append(" "); if (!tmpstr.StartsWith("WHERE ")) tmp.Append("WHERE "); } else if (!tmpstr.StartsWith(" WHERE ")) tmp.Append(" WHERE"); // add the passed in WHERE clause // When the WhereStr was upper cased, procedure numbers with mixed and/or lower // cased letters would not be found. Therefore, use the WhereStr exactly as it // was sent in. // tmp.Append(tmpstr); tmp.Append(WhereStr); } switch (SortingType) { case 0: //NotSorted break; case 1: // FromSort - sorted by FROMNUMBER tmp.Append(" GROUP BY [FROMNUMBER],[FROMSEQUEN],[FROMINSTAN],[TYPE],"); tmp.Append("[TONUMBER],[TOSEQUENCE],[TOINSTANCE],[DTI],[OLDTO]"); break; case 2: // Tosort - sorted by TONUMBER tmp.Append(" GROUP BY [TONUMBER],[TOSEQUENCE],[TOINSTANCE],"); tmp.Append("[FROMNUMBER],[FROMSEQUEN],[FROMINSTAN],[TYPE],[DTI],[OLDTO]"); break; } SelectCmd = tmp.ToString(); } private void BuildNDXFileNames() { TransFromNDX = DBTable +"FROM"; TransToNDX = DBTable + "TO"; } // Build the SQL command needed to update a row in the TRAN file public override string GetRecUpdateStr(DataTable tbl,DataRow row) { int j = 0; bool FirstOne = true; StringBuilder updateStr = new StringBuilder(); string strNumber = ""; string strSequence = ""; string strInstance = ""; updateStr.Append("UPDATE ["); updateStr.Append(DBTable); updateStr.Append("] SET"); foreach (DataColumn col in tbl.Columns) { bool isString = (col.DataType == Type.GetType("System.String")); if (col.ColumnName.Equals("FROMNUMBER")) { strNumber = row.ItemArray[j].ToString(); strNumber = strNumber.Replace("'","''"); } else if (col.ColumnName.Equals("FROMSEQUEN")) { strSequence = row.ItemArray[j].ToString(); strSequence = strSequence.Replace("'","''"); } else if (col.ColumnName.Equals("FROMINSTAN")) { strInstance = row.ItemArray[j].ToString(); strInstance = strInstance.Replace("'","''"); } if (FirstOne) { updateStr.Append(" ["); FirstOne = false; } else updateStr.Append(", ["); updateStr.Append(col.ColumnName); updateStr.Append("]="); if (row.ItemArray[j].ToString().Equals("")) { updateStr.Append("NULL"); } else if (isString) { String tmpstr = row.ItemArray[j].ToString(); updateStr.Append("'"); tmpstr = tmpstr.Replace("'","''"); updateStr.Append(tmpstr); updateStr.Append("'"); } j++; } // Add the WHERE clause updateStr.Append(" WHERE [FROMNUMBER] = '"); updateStr.Append(strNumber.ToString()); updateStr.Append("' AND [FROMSEQUEN] = '"); updateStr.Append(strSequence.ToString()); updateStr.Append("' AND [FROMINSTAN] = '"); updateStr.Append(strInstance.ToString()); updateStr.Append("'"); return updateStr.ToString(); } // Build the SQL command needed to insert a row in the TRAN file public override string GetRecInsertStr(DataTable tbl,DataRow row) { int j = 0; StringBuilder insrtStr = new StringBuilder(); StringBuilder valueStr = new StringBuilder(); insrtStr.Append("INSERT INTO ["); insrtStr.Append(DBTable); insrtStr.Append("] ("); valueStr.Append(" VALUES ("); foreach (DataColumn col in tbl.Columns) { bool isString = (col.DataType == Type.GetType("System.String")); insrtStr.Append("["); insrtStr.Append(col.ColumnName); insrtStr.Append("],"); if (row.ItemArray[j].ToString().Equals("")) { valueStr.Append("NULL"); } else if (isString) { String tmpstr = row.ItemArray[j].ToString(); tmpstr = tmpstr.Replace("'","''"); valueStr.Append("'"); valueStr.Append(tmpstr); valueStr.Append("'"); } else { valueStr.Append(row.ItemArray[j].ToString()); } valueStr.Append(","); j++; } insrtStr = insrtStr.Replace(',',')',insrtStr.Length-1,1); valueStr = valueStr.Replace(',',')',valueStr.Length-1,1); insrtStr.Append(valueStr.ToString()); return insrtStr.ToString(); } // Build the SQL command needed to delete a row in the TRAN file public override string RecDeleteStr(DataTable tbl,DataRow row) { int j = 0; string strNumber = ""; string strSequence = ""; string strInstance = ""; StringBuilder deleteStr = new StringBuilder(); deleteStr.Append("DELETE FROM ["); deleteStr.Append(DBTable); deleteStr.Append("]"); row.RejectChanges(); foreach (DataColumn col in tbl.Columns) { if (col.ColumnName.Equals("FROMNUMBER")) { strNumber = row.ItemArray[j].ToString(); strNumber = strNumber.Replace("'","''"); } else if (col.ColumnName.Equals("FROMSEQUEN")) { strSequence = row.ItemArray[j].ToString(); strSequence = strSequence.Replace("'","''"); } else if (col.ColumnName.Equals("FROMINSTAN")) { strInstance = row.ItemArray[j].ToString(); strInstance = strInstance.Replace("'","''"); } j++; } // Add the WHERE clause deleteStr.Append(" WHERE [FROMNUMBER] = '"); deleteStr.Append(strNumber.ToString()); deleteStr.Append("' AND [FROMSEQUEN] = '"); deleteStr.Append(strSequence.ToString()); deleteStr.Append("' AND [FROMINSTAN] = '"); deleteStr.Append(strInstance.ToString()); deleteStr.Append("'"); return deleteStr.ToString(); } public override string GetCreateIndx1String() { StringBuilder index1Str = new StringBuilder(); index1Str.Append("CREATE INDEX ["); index1Str.Append(TransFromNDX); index1Str.Append("] ON "); index1Str.Append(DBTable); index1Str.Append(".DBF ([FROMNUMBER],[FROMSEQUEN],[FROMINSTAN])"); return (index1Str.ToString()); } public override string GetCreateIndx2String() { StringBuilder index2Str = new StringBuilder(); index2Str.Append("CREATE INDEX ["); index2Str.Append(TransToNDX); index2Str.Append("] ON "); index2Str.Append(DBTable); index2Str.Append(".DBF ([TONUMBER], [TOSEQUENCE])"); return (index2Str.ToString()); } public override bool IndexFilesExist() { if (TransFromNDX==""||TransToNDX=="")BuildNDXFileNames(); if(!File.Exists(DBPath+"\\"+TransFromNDX+".NDX") || !File.Exists(DBPath+"\\"+TransToNDX+".NDX")) return false; return true; } public override void DeleteIndexFiles() { if(File.Exists(DBPath+"\\"+TransFromNDX+".NDX")) File.Delete(DBPath+"\\"+TransFromNDX+".NDX"); if(File.Exists(DBPath+"\\"+TransToNDX+".NDX")) File.Delete(DBPath+"\\"+TransToNDX+".NDX"); if(File.Exists(DBPath+"\\"+DBTable+".INF")) File.Delete(DBPath+"\\"+DBTable+".INF"); } public override StringCollection CreateIndexFilesStatements() { if (isdBaseFile()) { StringCollection rtnStrColl = new StringCollection(); string indx1 = GetCreateIndx1String(); rtnStrColl.Add(indx1); string indx2 = GetCreateIndx2String(); rtnStrColl.Add(indx2); return rtnStrColl; } return null; } // Build a list of SQL commands needed to create a new TRAN table (file) // and add the first row public override StringCollection CreateTableStatements(string strTblName) { StringCollection rtnStrColl = new StringCollection(); StringBuilder createStr = new StringBuilder(); //StringBuilder index1Str = new StringBuilder(); //StringBuilder index2Str = new StringBuilder(); if (strTblName.Length > 0) // was a table name passd in? { DBTable = strTblName; } if (DBTable.Equals("")) { MessageBox.Show("Trying to Create a new Table without a Name","Create Table Error"); return rtnStrColl; } // Build the command that creates a new SET table (file) createStr.Append("CREATE TABLE ["); createStr.Append(DBTable); createStr.Append("] "); createStr.Append("([FROMNUMBER] Char(20), [FROMSEQUEN] Char(12), "); createStr.Append("[FROMINSTAN] Char(1), [TYPE] Char(1),"); createStr.Append("[TONUMBER] Char(20), [TOSEQUENCE] Char(12), "); createStr.Append("[TOINSTANCE] Char(2), [DTI] Char(18), [OLDTO] Char(32))"); rtnStrColl.Add(createStr.ToString()); // add create table if (isdBaseFile()) { // Build the command that creates the first index file rtnStrColl.Add(GetCreateIndx1String()); // add create 1st index // Build the commmand that creates the second index file //string tmp = DBTable; rtnStrColl.Add(GetCreateIndx2String()); // add create 2nd index } return rtnStrColl; } // After the table is created, create the associated INF file public override int PostCreateTableFunction() { CreateINF(); // should already be created return 0; } // This will be called from CreateTableStatements() // and this is called if the table name is assigned to the DBTable property public override int CreateINF() { // if we are using dBase files, create an INF file containing // a list of the associated NDX files. if (isdBaseFile()) { StreamWriter infFile; string infFileStr; StringBuilder tmp = new StringBuilder(); // build the ndx file names (w/o extensions) BuildNDXFileNames(); //build INF file name tmp.Append(DBPath); tmp.Append("\\"); tmp.Append(DBTable); tmp.Append(".INF"); infFileStr = tmp.ToString(); // if the INF file does not already exist create it //if (!File.Exists(infFileStr)) //{ // always recreate it. Some plants' data had invalid files // and it was felt that it would be quicker to recreate always // rather than infFile = new StreamWriter(infFileStr,false); infFile.Write("NDX1="); infFile.Write(TransFromNDX); // TRANFROM.NDX infFile.Write(".NDX\r\n"); infFile.Write("NDX2="); infFile.Write(TransToNDX); //TRANTO.NDX infFile.Write(".NDX\r\n"); infFile.Close(); //} } return 0; } // return a list of SQL commands that will drop (delete) a database table (file) public override StringCollection DeleteTableStatements(string strTblName) { StringCollection rtnStrColl = new StringCollection(); StringBuilder DropTableStr = new StringBuilder(); DropTableStr.Append("Drop Table ["); DropTableStr.Append(DBTable); DropTableStr.Append("]"); rtnStrColl.Add(DropTableStr.ToString()); return rtnStrColl; } // return a dataset of Transition Usage records, not sorted public System.Data.DataSet GetNotSorted(string WhereStr) { BuildSelectCommand((int)SortTypes.NotSorted,WhereStr); return DB_Data; } // return a dataset or Transition Usage records, sorted by the [FROMNUMBER] field public System.Data.DataSet GetSortedByFromTrans(string WhereStr) { BuildSelectCommand((int)SortTypes.FromSort,WhereStr); return DB_Data; } // return a dataset or Transition Usage records, sorted by the [TONUMBER] field public System.Data.DataSet GetSortedByToTrans(string WhereStr) { BuildSelectCommand((int)SortTypes.ToSort,WhereStr); return DB_Data; } public void UpdateProcNumber(string oldnum, string newnum) { // Change fromnumber first, then tonumber StringBuilder updateStr = new StringBuilder(); updateStr.Append("UPDATE ["); updateStr.Append(DBTable); updateStr.Append("] SET [FROMNUMBER] = '"); updateStr.Append(newnum.Replace("'","''")); updateStr.Append("' WHERE [FROMNUMBER] = '"); updateStr.Append(oldnum.Replace("'","''")); updateStr.Append("'"); ProcessACommand(updateStr.ToString()); // now to... updateStr.Remove(0,updateStr.Length); updateStr.Append("UPDATE ["); updateStr.Append(DBTable); updateStr.Append("] SET [TONUMBER] = '"); updateStr.Append(newnum.Replace("'","''")); updateStr.Append("' WHERE [TONUMBER] = '"); updateStr.Append(oldnum.Replace("'","''")); updateStr.Append("'"); ProcessACommand(updateStr.ToString()); } } }