353 lines
11 KiB
C#
353 lines
11 KiB
C#
/*********************************************************************************************
|
|
* Copyright 2002 - Volian Enterprises, Inc. All rights reserved.
|
|
* Volian Enterprises - Proprietary Information - DO NOT COPY OR DISTRIBUTE
|
|
* ------------------------------------------------------------------------------
|
|
* $Workfile: RODBRecordInterface.cs $ $Revision: 4 $
|
|
* $Author: Jsj $ $Date: 1/27/03 2:56p $
|
|
*
|
|
* $History: RODBRecordInterface.cs $
|
|
*
|
|
* ***************** Version 4 *****************
|
|
* User: Jsj Date: 1/27/03 Time: 2:56p
|
|
* Updated in $/EXE/RefObj/ParadoxConversion
|
|
* using OLEDB for the connection
|
|
*
|
|
* ***************** Version 3 *****************
|
|
* User: Jsj Date: 10/04/02 Time: 2:02p
|
|
* Updated in $/EXE/RefObj/ParadoxConversion
|
|
* added better user interface
|
|
*
|
|
* ***************** Version 2 *****************
|
|
* User: Jsj Date: 9/25/02 Time: 10:20a
|
|
* Updated in $/EXE/RefObj/ParadoxConversion
|
|
* added header
|
|
*********************************************************************************************/
|
|
|
|
using System;
|
|
//using System.Collections;
|
|
using System.IO;
|
|
using System.Data;
|
|
using System.Text;
|
|
using System.Windows.Forms;
|
|
using DBEncapsulation;
|
|
|
|
namespace ParadoxConversion
|
|
{
|
|
/// <summary>
|
|
/// This class contains a very simple interface to the RO Database.
|
|
/// All the database conversion module needs is to create a new table
|
|
/// and write a database record.
|
|
/// </summary>
|
|
public class RODBRecordInterface
|
|
{
|
|
bool success;
|
|
|
|
DBEncapsulation.DBEncapsulate DBE;
|
|
DBEncapsulation.OLEDB_DBEncap DBE_OLEDB;
|
|
DBEncapsulation.ODBC_DBEncap DBE_ODBC;
|
|
|
|
private string strAccOLEDBconn = "";
|
|
private string strSQLOLEDBconn = "";
|
|
private string strAccODBCconn = "";
|
|
private string strodbcConn = "";
|
|
|
|
public RODBRecordInterface(int conntype, string connectstring)
|
|
{
|
|
// Setup the connection string
|
|
// if (connectstring.Equals(""))
|
|
// GetConnectionStringFromFile();
|
|
// else
|
|
BuildConnectionString(connectstring);
|
|
|
|
// Initialize the connection depending on OLE-DB or ODBC:
|
|
conntype = 2; // for now - till valid data passed in.
|
|
// conntype = 1; // for now - till valid data passed in.
|
|
//END OF TEMPORARY
|
|
|
|
// Either use an OLE-DB or ODBC connection, depending on what was passed in.
|
|
if ( conntype == 1)
|
|
{
|
|
DBE_ODBC = new ODBC_DBEncap();
|
|
DBE = DBE_ODBC;
|
|
}
|
|
else
|
|
{
|
|
DBE_OLEDB = new OLEDB_DBEncap();
|
|
DBE = DBE_OLEDB;
|
|
}
|
|
|
|
try
|
|
{
|
|
DBE.Connection(strAccOLEDBconn);
|
|
// DBE.Connection(strodbcConn);
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
Console.WriteLine("error {0}", e.Message);
|
|
}
|
|
}
|
|
|
|
public void RODB_OpenConnection()
|
|
{
|
|
try
|
|
{
|
|
DBE.OpenConnection();
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
Console.WriteLine("Error opening database connection.\n{0}",e.Message);
|
|
}
|
|
}
|
|
|
|
public void RODB_CloseConnection()
|
|
{
|
|
try
|
|
{
|
|
DBE.CloseConnection();
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
Console.WriteLine("Error closing database connection.\n",e.Message);
|
|
}
|
|
}
|
|
|
|
/*
|
|
* Create a new Referenced Objects table in the current database
|
|
*/
|
|
public void RODB_AddNewTable(String TblName)
|
|
{
|
|
|
|
string strMkTable = "CREATE TABLE "+ TblName + " (";
|
|
// strMkTable = strMkTable + "UID Integer NULL ,";
|
|
strMkTable = strMkTable + "RecID Char(8) NULL ,";
|
|
strMkTable = strMkTable + "RecType Integer ,";
|
|
strMkTable = strMkTable + "ParentID char(8) NULL ,";
|
|
strMkTable = strMkTable + "AccPageID char(32) NULL ,";
|
|
strMkTable = strMkTable + "ModDateTime char(14) NULL ,";
|
|
strMkTable = strMkTable + "Info Memo NULL)";
|
|
try
|
|
{
|
|
DBE.Command(strMkTable);
|
|
// DBE.Reader();
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
Console.WriteLine("Command error:\n{0}", e.Message);
|
|
// bool retval = false;
|
|
}
|
|
// DBE.ReaderClose();
|
|
try
|
|
{
|
|
DBE.NonQuery();
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
Console.WriteLine("NonQuery error:\n{0}", e.Message);
|
|
// bool retval = false;
|
|
}
|
|
DBE.CommandDispose();
|
|
}
|
|
|
|
/*
|
|
* Write an RO Database record
|
|
*/
|
|
public void RODB_WriteDbRecord(String DBTable, String RecID, int RecType, String ParID, String AcPgID, String DateTime, String Info)
|
|
{
|
|
String DbRecCmd;
|
|
|
|
// if no RecID provided, then get the next available one.
|
|
if (RecID.CompareTo("") == 0)
|
|
{
|
|
RecID = RODB_GetNextRecid(DBTable);
|
|
}
|
|
|
|
DbRecCmd = "INSERT INTO " + DBTable + " (RecID, RecType, ParentID, AccPageID, ModDateTime, Info) VALUES ('";
|
|
DbRecCmd += RecID + "', " + RecType + ", '" + ParID + "', '" + AcPgID + "', '" + DateTime + "', '" + Info + "');";
|
|
try
|
|
{
|
|
DBE.Command(DbRecCmd);
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
success = false;
|
|
Console.WriteLine("RODB_WriteDbRecord Caught an exception:\n{0}", e.Message);
|
|
}
|
|
try
|
|
{
|
|
DBE.NonQuery();
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
Console.WriteLine("NonQuery error:\n{0}", e.Message);
|
|
// bool retval = false;
|
|
}
|
|
DBE.CommandDispose();
|
|
}
|
|
|
|
public void GetConnectionStringFromFile()
|
|
{
|
|
/* This file should contain the connection strings in the followin order:
|
|
* AccOLEDBconn, SQLOLEDBconn, AccODBCconn, odbcConn.
|
|
*/
|
|
// append "ConnectList.txt" to the path of the location of the exe being run
|
|
// for example: VE-PROMS.NET\BIN or BIN\DEBUG
|
|
// This set in Visual Studio .NET in the properties dialog of the project, select
|
|
// Configuration Properties. You will see an option call Output Path.
|
|
string FileName = Application.StartupPath + "\\ConnectList.txt";
|
|
|
|
if (!File.Exists(FileName))
|
|
{
|
|
// File does not exist
|
|
Console.WriteLine("Could not find ConnectList.txt file");
|
|
return;
|
|
}
|
|
|
|
/*
|
|
* Open the text file for reading
|
|
*/
|
|
StreamReader sr = File.OpenText(FileName);
|
|
|
|
/*
|
|
* Connection string to MS-access use with oledb directly
|
|
*/
|
|
strAccOLEDBconn = sr.ReadLine();
|
|
|
|
/*
|
|
* connection string to SQL-server use with oledb
|
|
*/
|
|
strSQLOLEDBconn = sr.ReadLine();
|
|
|
|
/*
|
|
* connection string to for oledb to odbc dsn
|
|
*/
|
|
strAccODBCconn = sr.ReadLine();
|
|
|
|
/*
|
|
* ODBC connection:
|
|
* ACCESS:
|
|
*/
|
|
strodbcConn = sr.ReadLine();
|
|
|
|
sr.Close(); // close ConnectList.txt
|
|
|
|
}
|
|
|
|
public void BuildConnectionString(string DataConnectionPath)
|
|
{
|
|
/*
|
|
* Connect to MSAccess using OLEDB directly
|
|
*/
|
|
|
|
// strAccOLEDBconn = "Provider=Microsoft.Jet.OLEDB.4.0;Password=\"\";User ID=Admin;Data Source=I:\\RO Design\\RO\\ROMaster.mdb;Mode=Share Deny None;Extended Properties=\"\";Jet OLEDB:System database=\"\";Jet OLEDB:Registry Path=\"\";Jet OLEDB:Database Password=\"\";Jet OLEDB:Engine Type=5;Jet OLEDB:Database Locking Mode=1;Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Database Password=\"\";Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Don't Copy Locale on Compact=False;Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False";
|
|
|
|
strAccOLEDBconn = "Provider=Microsoft.Jet.OLEDB.4.0;Password=\"\";User ID=Admin;Data Source=" + DataConnectionPath +"\\ROMaster.mdb;Mode=Share Deny None;Extended Properties=\"\";Jet OLEDB:System database=\"\";Jet OLEDB:Registry Path=\"\";Jet OLEDB:Database Password=\"\";Jet OLEDB:Engine Type=5;Jet OLEDB:Database Locking Mode=1;Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Database Password=\"\";Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Don't Copy Locale on Compact=False;Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False";
|
|
|
|
/*
|
|
* Connect to SQL-server using OLEDB
|
|
*/
|
|
// !!!!! do we need the Workstation ID? if so, we need to pass this in too!
|
|
|
|
// strSQLOLEDBconn = "Provider=SQLOLEDB;Persist Security Info=False;User ID=sa;Initial Catalog=ROMaster;Data Source=DELL-W2K-SERVER\\SQL2000;Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Workstation ID=KATHY;Use Encryption for Data=False;Tag with column collation when possible=False";
|
|
|
|
strSQLOLEDBconn = "Provider=SQLOLEDB;Persist Security Info=False;User ID=sa;Initial Catalog=ROMaster;Data Source=" + DataConnectionPath +"\\ROMaster.mdb;Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Workstation ID=KATHY;Use Encryption for Data=False;Tag with column collation when possible=False";
|
|
|
|
/*
|
|
* Connect to MSAccess using OLEDB and ODBC DSN
|
|
*/
|
|
|
|
// strAccODBCconn = "Provider=MSDASQL.1;Persist Security Info=False;Data Source=Access for RO;Extended Properties=\"DSN=Access for RO;DBQ=I:\\RO Design\\RO\\ROMaster.mdb;DriverId=25;FIL=MS Access;MaxBufferSize=2048;PageTimeout=5;\"";
|
|
|
|
strAccODBCconn = "Provider=MSDASQL.1;Persist Security Info=False;Data Source=Access for RO;Extended Properties=\"DSN=Access for RO;DBQ=" + DataConnectionPath + "\\ROMaster.mdb;DriverId=25;FIL=MS Access;MaxBufferSize=2048;PageTimeout=5;\"";
|
|
|
|
/*
|
|
* Connection to MSAccess using an ODBC connection
|
|
*/
|
|
// strodbcConn = "Driver={Microsoft Access Driver (*.mdb)};DBQ=i:\\Ro Design\\RO\\ROMaster.mdb";
|
|
strodbcConn = "Driver={Microsoft Access Driver (*.mdb)};DBQ=" + DataConnectionPath + "\\ROMaster.mdb";
|
|
|
|
// Connection to SQL Server using an ODBC connection
|
|
//strodbcConn = "Driver={SQL Server};Server=DELL-W2K-SERVER\\SQL2000;UID=sa;Database=ROMaster";
|
|
|
|
//SQL - DSN - worked: string strodbcConn = "DSN=SQL RO;UID=sa";
|
|
//Initial odbc tests on strodbcconn
|
|
}
|
|
|
|
/*
|
|
* Get the next available RO Database RecID
|
|
*/
|
|
public String RODB_GetNextRecid(String DBTable)
|
|
{
|
|
String NextRecID="";
|
|
String RtnStr = "";
|
|
String SpcStr = " ";
|
|
String ZeroStr = "0";
|
|
String DbCmd = "SELECT Info FROM " + DBTable + " WHERE RecID = '00000000'";
|
|
|
|
try
|
|
{
|
|
DBE.Command(DbCmd);
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
success = false;
|
|
Console.WriteLine("RODB_GetNextRecid - Read NextRecID Caught an exception:\n{0}", e.Message);
|
|
}
|
|
|
|
|
|
if (DBE.Reader())
|
|
{
|
|
if (DBE.Read())
|
|
{
|
|
RtnStr = DBE.GetString(0);
|
|
DBE.ReaderClose();
|
|
}
|
|
}
|
|
else
|
|
{
|
|
System.Windows.Forms.MessageBox.Show("Could Not Open Reader");
|
|
}
|
|
|
|
// Create the new next RecID
|
|
if (RtnStr.CompareTo("") != 0)
|
|
{
|
|
uint nxID = Convert.ToUInt32(RtnStr,16);
|
|
nxID++;
|
|
NextRecID = String.Format("{0,8:X}",nxID);// 8 char field padded on left with blanks
|
|
NextRecID = NextRecID.Replace(SpcStr,ZeroStr);
|
|
}
|
|
else
|
|
{
|
|
// there is no next RecID
|
|
Console.WriteLine("RODB_GetNextRecid No Next RecID!");
|
|
}
|
|
|
|
// Write the new next RecID
|
|
DbCmd = "UPDATE " + DBTable + " SET " + DBTable + ".Info = '" + NextRecID + "'";
|
|
DbCmd = DbCmd + " WHERE RecID = '00000000';";
|
|
|
|
try
|
|
{
|
|
DBE.Command(DbCmd);
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
success = false;
|
|
Console.WriteLine("RODB_GetNextRecid - Write new NextRecID Caught an exception:\n{0}", e.Message);
|
|
}
|
|
|
|
try
|
|
{
|
|
DBE.NonQuery();
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
Console.WriteLine("NonQuery error:\n{0}", e.Message);
|
|
// bool retval = false;
|
|
}
|
|
DBE.CommandDispose();
|
|
|
|
return RtnStr;
|
|
}
|
|
}
|
|
}
|