-//\r
-// System.Data.OleDb.OleDbConnection\r
+//
+// System.Data.OleDb.OleDbConnection
//
// Authors:
// Konstantin Triger <kostat@mainsoft.com>
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//\r
-\r
-\r
-\r
-using System.Data;\r
-using System.Data.Common;\r
-using System.Collections;\r
-\r
-using java.sql;\r
-\r
-namespace System.Data.OleDb\r
-{\r
- public sealed class OleDbConnection : AbstractDBConnection, System.ICloneable\r
- {\r
- #region Fields \r
-\r
- protected static Hashtable _skippedUserParameters = new Hashtable(new CaseInsensitiveHashCodeProvider(),new CaseInsensitiveComparer());\r
-\r
- private static DbStringManager _stringManager = new DbStringManager("System.Data.System.Data.ProviderBase.jvm.OleDbStrings");\r
-\r
- private static readonly string[] _resourceIgnoredKeys = new string[] {"CON_PROVIDER","CON_DATA_SOURCE","CON_DATABASE",\r
- "CON_PASSWORD","CON_USER_ID","CON_TIMEOUT",\r
- "CON_SERVER_NAME","CON_PORT","CON_SERVICE_NAME",\r
- "CON_JNDI_NAME","CON_JNDI_PROVIDER","CON_JNDI_FACTORY",\r
- "JDBC_DRIVER","JDBC_URL","DB2_CON_LOCATION" };\r
-\r
- #endregion //Fields\r
-\r
- #region Events\r
-\r
- public event OleDbInfoMessageEventHandler InfoMessage;\r
- public event StateChangeEventHandler StateChange;\r
-\r
- #endregion // Events\r
- \r
- #region Constructors\r
-\r
- public OleDbConnection() : this(null)\r
- {\r
- }\r
-\r
- public OleDbConnection(String connectionString) : base(connectionString)\r
- { \r
- }\r
-\r
- #endregion // Constructors\r
-\r
- #region Properties\r
-\r
- protected override string[] ResourceIgnoredKeys\r
- {\r
- get { return _resourceIgnoredKeys; }\r
- }\r
-\r
- public String Provider\r
- {\r
- get { return ConnectionStringHelper.FindValue(UserParameters,StringManager.GetStringArray("CON_PROVIDER")); }\r
- }\r
-\r
- protected override Hashtable SkippedUserParameters\r
- {\r
- get { return _skippedUserParameters; }\r
- }\r
-\r
- protected override string ServerName\r
- {\r
- get { \r
- if (ProviderType == PROVIDER_TYPE.IBMDADB2 || ProviderType == PROVIDER_TYPE.MSDAORA) {\r
- string host = ConnectionStringHelper.FindValue(UserParameters,StringManager.GetStringArray("CON_SERVER_NAME"));\r
-\r
- if (!String.Empty.Equals(host)) {\r
- return host;\r
- }\r
-\r
- if (ProviderType == PROVIDER_TYPE.IBMDADB2) {\r
- string location = ConnectionStringHelper.FindValue(UserParameters,StringManager.GetStringArray("DB2_CON_LOCATION"));\r
-\r
- if (!String.Empty.Equals(location)) {\r
- int semicolumnIndex = location.IndexOf(':');\r
- if (semicolumnIndex != -1) {\r
- return location.Substring(0,semicolumnIndex);\r
- }\r
- else {\r
- return location;\r
- }\r
- }\r
- }\r
-\r
- }\r
- return base.ServerName; \r
- }\r
- }\r
-\r
- protected override string CatalogName\r
- {\r
- get { \r
- switch (ProviderType) {\r
- case PROVIDER_TYPE.IBMDADB2:\r
- case PROVIDER_TYPE.MSDAORA:\r
- return DataSource;\r
- }\r
- return base.CatalogName;\r
- }\r
- }\r
-\r
- protected override string Port\r
- {\r
- get {\r
- string port = ConnectionStringHelper.FindValue(UserParameters, StringManager.GetStringArray("CON_PORT"));\r
- switch (ProviderType) {\r
- case PROVIDER_TYPE.MSDAORA :\r
- if (String.Empty.Equals(port)) {\r
- return StringManager.GetString("ORA_CON_PORT");\r
- }\r
- return port;\r
- case PROVIDER_TYPE.IBMDADB2 :\r
- if (String.Empty.Equals(port)) {\r
- string location = ConnectionStringHelper.FindValue(UserParameters,StringManager.GetStringArray("DB2_CON_LOCATION"));\r
-\r
- if (!String.Empty.Equals(location)) {\r
- int semicolumnIndex = location.IndexOf(':');\r
- if (semicolumnIndex != -1) {\r
- return location.Substring(semicolumnIndex + 1);\r
- }\r
- }\r
- return StringManager.GetString("DB2_CON_PORT");\r
- }\r
- return port;\r
- }\r
- return base.Port;\r
- }\r
- }\r
-\r
- protected override string JdbcDriverName\r
- {\r
- get {\r
- JDBC_MODE jdbcMode = JdbcMode;\r
- switch (jdbcMode) {\r
- case JDBC_MODE.DATA_SOURCE_MODE :\r
- return base.JdbcDriverName;\r
- case JDBC_MODE.JDBC_DRIVER_MODE :\r
- return ConnectionStringHelper.FindValue(UserParameters,StringManager.GetStringArray("JDBC_DRIVER"));\r
- case JDBC_MODE.PROVIDER_MODE:\r
- switch (ProviderType) {\r
- case PROVIDER_TYPE.SQLOLEDB :\r
- return StringManager.GetString("SQL_JDBC_DRIVER");\r
- case PROVIDER_TYPE.MSDAORA :\r
- return StringManager.GetString("ORA_JDBC_DRIVER");\r
- case PROVIDER_TYPE.IBMDADB2 :\r
- return StringManager.GetString("DB2_JDBC_DRIVER");\r
- }\r
- break;\r
- };\r
- return base.JdbcDriverName;\r
- }\r
- }\r
-\r
- protected override DbStringManager StringManager\r
- {\r
- get { return _stringManager; }\r
- }\r
-\r
- #endregion // Properties\r
-\r
- #region Methods\r
-\r
- public new OleDbTransaction BeginTransaction(IsolationLevel level)\r
- {\r
- return new OleDbTransaction(level, this);\r
- }\r
-\r
- public new OleDbTransaction BeginTransaction()\r
- {\r
- return BeginTransaction(IsolationLevel.ReadCommitted);\r
- }\r
-\r
- public new OleDbCommand CreateCommand()\r
- {\r
- return new OleDbCommand(this);\r
- }\r
-\r
- protected override DbTransaction BeginDbTransaction(IsolationLevel isolationLevel) {\r
- return BeginTransaction();\r
- }\r
-\r
- protected override DbCommand CreateDbCommand() {\r
- return CreateCommand();\r
- }\r
-\r
-\r
- protected internal override void CopyTo(AbstractDBConnection target)\r
- {\r
- base.CopyTo(target);\r
- }\r
-\r
- public object Clone()\r
- {\r
- OleDbConnection clone = new OleDbConnection();\r
- CopyTo(clone);\r
- return clone;\r
- }\r
-\r
- protected override SystemException CreateException(SQLException e)\r
- {\r
- return new OleDbException(e,this); \r
- }\r
-\r
- public DataTable GetOleDbSchemaTable (Guid schema, object[] restrictions)\r
- {\r
- DataTable schemaTable = new DataTable("Tables");\r
- schemaTable.Columns.Add("TABLE_CATALOG");\r
- schemaTable.Columns.Add("TABLE_SCHEMA");\r
- schemaTable.Columns.Add("TABLE_NAME");\r
- schemaTable.Columns.Add("TABLE_TYPE");\r
- schemaTable.Columns.Add("TABLE_GUID");\r
- schemaTable.Columns.Add("DESCRIPTION");\r
- schemaTable.Columns.Add("TABLE_PROPID");\r
- schemaTable.Columns.Add("DATE_CREATED");\r
- schemaTable.Columns.Add("DATE_MODIFIED");\r
- \r
- \r
- Connection con = JdbcConnection;\r
- String catalog = con.getCatalog();\r
- \r
- DatabaseMetaData meta = con.getMetaData();\r
- ResultSet schemaRes = meta.getSchemas();\r
- System.Collections.ArrayList schemas = new System.Collections.ArrayList();\r
- while(schemaRes.next()) {\r
- schemas.Add(schemaRes.getString(1));\r
- }\r
- schemaRes.close();\r
-\r
- for(int i = 0; i < schemas.Count; i++) {\r
- ResultSet tableRes = meta.getTables(catalog, schemas[i].ToString(), null, null);\r
- while(tableRes.next()) {\r
- DataRow row = schemaTable.NewRow();\r
- row["TABLE_CATALOG"] = catalog;\r
- row["TABLE_SCHEMA"] = schemas[i];\r
- row["TABLE_NAME"] = tableRes.getString("TABLE_NAME");\r
- row["TABLE_TYPE"] = tableRes.getString("TABLE_TYPE");\r
- row["DESCRIPTION"] = tableRes.getString("REMARKS");\r
- \r
- schemaTable.Rows.Add(row);\r
- }\r
- tableRes.close();\r
- }\r
- return schemaTable;\r
- }\r
-\r
- protected internal override void ValidateConnectionString(string connectionString)\r
- {\r
- base.ValidateConnectionString(connectionString);\r
-\r
- JDBC_MODE currentJdbcMode = JdbcMode;\r
- \r
- if (currentJdbcMode == JDBC_MODE.NONE) {\r
- string provider = StringManager.GetString("CON_PROVIDER");\r
-\r
- if (String.Empty.Equals(provider)) {\r
- throw ExceptionHelper.OleDbNoProviderSpecified();\r
- }\r
- }\r
- }\r
-\r
- protected override string BuildJdbcUrl()\r
- {\r
- switch (JdbcMode) {\r
- case JDBC_MODE.PROVIDER_MODE :\r
- switch (ProviderType) {\r
- case PROVIDER_TYPE.IBMDADB2:\r
- return BuildDb2Url();\r
- case PROVIDER_TYPE.MSDAORA:\r
- return BuildOracleUrl();\r
- case PROVIDER_TYPE.SQLOLEDB:\r
- return BuildMsSqlUrl();\r
- }\r
- break;\r
- }\r
- return base.BuildJdbcUrl();\r
- }\r
-\r
- public static void ReleaseObjectPool()\r
- {\r
- // since we're using connection pool from app servet, this is by design\r
- //throw new NotImplementedException();\r
- }\r
-\r
- internal override void OnSqlWarning(SQLWarning warning)\r
- {\r
- OleDbErrorCollection col = new OleDbErrorCollection(warning, this);\r
- OnOleDbInfoMessage(new OleDbInfoMessageEventArgs(col));\r
- }\r
-\r
- internal override Connection GetConnectionFromProvider()\r
- {\r
- if ((ProviderType == PROVIDER_TYPE.MSDAORA) && \r
- ("true").Equals(StringManager.GetString("ORA_CONNECTION_POOLING_ENABLED","false"))) {\r
- ActivateJdbcDriver(JdbcDriverName);\r
- return OleDbConnectionFactory.GetConnection(ProviderType,JdbcUrl,User,Password,ConnectionTimeout);\r
- }\r
- else {\r
- return base.GetConnectionFromProvider();\r
- }\r
- }\r
-\r
- private String BuildDb2Url()\r
- {\r
- return StringManager.GetString("DB2_JDBC_URL") //jdbc:db2://\r
- + ServerName + ":" + Port + "/" + CatalogName;\r
- }\r
-\r
- private String BuildOracleUrl()\r
- {\r
- return StringManager.GetString("ORA_JDBC_URL") //"jdbc:oracle:thin:@"\r
- + ServerName + ":" + Port + ":" + CatalogName;\r
- }\r
- \r
- internal override void OnStateChanged(ConnectionState orig, ConnectionState current)\r
- {\r
- if(StateChange != null) {\r
- StateChange(this, new StateChangeEventArgs(orig, current));\r
- }\r
- }\r
-\r
- public override void Close()\r
- {\r
- ConnectionState orig = State;\r
- base.Close();\r
- ConnectionState current = State;\r
- if(current != orig) {\r
- OnStateChanged(orig, current);\r
- }\r
- }\r
-\r
+//
+
+
+
+using System.Data;
+using System.Data.Common;
+using System.Collections;
+using System.Data.ProviderBase;
+using System.Globalization;
+
+using java.sql;
+
+using System.Configuration;
+using Mainsoft.Data.Configuration;
+using Mainsoft.Data.Jdbc.Providers;
+
+namespace System.Data.OleDb
+{
+ public sealed class OleDbConnection : AbstractDBConnection {
+
+ #region Events
+
+ public event OleDbInfoMessageEventHandler InfoMessage;
+
+ #endregion // Events
+
+ #region Constructors
+
+ public OleDbConnection() : this(null) {
+ }
+
+ public OleDbConnection(String connectionString) : base(connectionString) {
+ }
+
+ #endregion // Constructors
+
+ #region Properties
+
+ public String Provider {
+ get {
+ IDictionary conDict = ConnectionStringBuilder;
+ string provider = (string)conDict["Provider"];
+ if (provider == null || provider.Length == 0)
+ throw ExceptionHelper.OleDbNoProviderSpecified();
+
+ return provider;
+ }
+ }
+
+ protected override IConnectionProvider GetConnectionProvider() {
+ IDictionary conProviderDict = ConnectionStringDictionary.Parse(ConnectionString);
+ string jdbcUrl = (string)conProviderDict["JdbcUrl"];
+ if (jdbcUrl == null) {
+ string provider = (string)conProviderDict["Provider"];
+ if (provider != null)
+ return GetConnectionProvider("Mainsoft.Data.Configuration/OleDbProviders", provider);
+ }
+
+ return new GenericProvider (conProviderDict);
+ }
+
+ #endregion // Properties
+
+ #region Methods
+
+ public new OleDbTransaction BeginTransaction(IsolationLevel level)
+ {
+ return new OleDbTransaction(level, this);
+ }
+
+ public new OleDbTransaction BeginTransaction()
+ {
+ return BeginTransaction(IsolationLevel.ReadCommitted);
+ }
+
+ public new OleDbCommand CreateCommand()
+ {
+ return new OleDbCommand(this);
+ }
+
+ protected override DbTransaction BeginDbTransaction(IsolationLevel isolationLevel) {
+ return BeginTransaction();
+ }
+
+ protected override DbCommand CreateDbCommand() {
+ return CreateCommand();
+ }
+
+ protected sealed override SystemException CreateException(SQLException e)
+ {
+ return new OleDbException(e,this);
+ }
+
+ protected sealed override SystemException CreateException(string message)
+ {
+ return new OleDbException(message, null, this);
+ }
+
+ [MonoTODO]
+ public DataTable GetOleDbSchemaTable (Guid schema, object[] restrictions)
+ {
+ if (State != ConnectionState.Open)
+ throw ExceptionHelper.ConnectionNotOpened("GetOleDbSchemaTable", State.ToString());
+
+ try {
+
+ string[] fixedRestrictions = new string[4];
+ if (restrictions != null) {
+ if (restrictions.Length > 4)
+ throw new OleDbException("The parameter is incorrect", null, this);
+
+ for (int i = 0, count = restrictions.Length; i < count; i ++) {
+ if (restrictions[i] != null) {
+ if (!(restrictions[i] is string))
+ throw new OleDbException("The parameter is incorrect", null, this);
+
+ fixedRestrictions[i] = (string)restrictions[i];
+ }
+ }
+ }
+
+ DataTable schemaTable = new DataTable("Tables");
+ schemaTable.Columns.Add("TABLE_CATALOG");
+ schemaTable.Columns.Add("TABLE_SCHEMA");
+ schemaTable.Columns.Add("TABLE_NAME");
+ schemaTable.Columns.Add("TABLE_TYPE");
+ schemaTable.Columns.Add("TABLE_GUID");
+ schemaTable.Columns.Add("DESCRIPTION");
+ schemaTable.Columns.Add("TABLE_PROPID");
+ schemaTable.Columns.Add("DATE_CREATED");
+ schemaTable.Columns.Add("DATE_MODIFIED");
+
+ java.sql.ResultSet tableRes = JdbcConnection.getMetaData().getTables(
+ fixedRestrictions[0],
+ fixedRestrictions[1],
+ fixedRestrictions[2],
+ new string[]{fixedRestrictions[3]});
+
+ try {
+ while(tableRes.next()) {
+ DataRow row = schemaTable.NewRow();
+ row["TABLE_CATALOG"] = tableRes.getString("TABLE_CAT");
+ row["TABLE_SCHEMA"] = tableRes.getString("TABLE_SCHEM");
+ row["TABLE_NAME"] = tableRes.getString("TABLE_NAME");
+ row["TABLE_TYPE"] = tableRes.getString("TABLE_TYPE");
+ row["DESCRIPTION"] = tableRes.getString("REMARKS");
+
+ schemaTable.Rows.Add(row);
+ }
+ }
+ finally {
+ tableRes.close();
+ }
+
+ return schemaTable;
+ }
+ catch (SQLException e) {
+ throw CreateException(e);
+ }
+ }
+
+ public static void ReleaseObjectPool()
+ {
+ // since we're using connection pool from app servet, this is by design
+ //throw new NotImplementedException();
+ }
+
+#if NET_2_0
+ [MonoLimitation ("Empty implementation since State relies on java.sql.Connection.State always returning the correct state")]
+ public void ResetState ()
+ {
+ }
+
+#endif
+
+ protected internal sealed override void OnSqlWarning(SQLWarning warning)
+ {
+ OleDbErrorCollection col = new OleDbErrorCollection(warning, this);
+ OnOleDbInfoMessage(new OleDbInfoMessageEventArgs(col));
+ }
+
private void OnOleDbInfoMessage (OleDbInfoMessageEventArgs value)
{
if (InfoMessage != null) {
InfoMessage (this, value);
}
- }\r
-\r
- #endregion // Methods\r
-\r
- }\r
-}
\ No newline at end of file
+ }
+
+ #endregion // Methods
+
+ }
+}