Skip to content

Commit 23d03a9

Browse files
author
“llt”
committed
More dynamic setting of connection string
1 parent 6ed2e8f commit 23d03a9

5 files changed

Lines changed: 70 additions & 43 deletions

File tree

frameworks/CSharp/appmpower/src/appMpower.Orm/Data/DbConnection.cs

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,16 @@ public DbConnection()
2020
public DbConnection(string connectionString, bool keyed = false)
2121
{
2222
_keyed = keyed;
23-
_connectionString = connectionString;
24-
GetConnection();
23+
_connectionString = connectionString;
24+
25+
if (Constants.DbProvider == DbProvider.ODBC)
26+
{
27+
GetConnection();
28+
}
29+
else
30+
{
31+
_dbConnection = DbFactory.GetConnection(_connectionString);
32+
}
2533
}
2634

2735
public IDbConnection Connection
@@ -133,13 +141,20 @@ public async Task OpenAsync()
133141

134142
public void Dispose()
135143
{
136-
if (_keyed)
144+
if (Constants.DbProvider == DbProvider.ODBC)
137145
{
138-
DbConnectionsKeyed.Release((Number: _number, DbConnection: _dbConnection, KeyedDbCommands: _keyedDbCommands));
146+
if (_keyed)
147+
{
148+
DbConnectionsKeyed.Release((Number: _number, DbConnection: _dbConnection, KeyedDbCommands: _keyedDbCommands));
149+
}
150+
else
151+
{
152+
DbConnections.Release((Number: _number, DbConnection: _dbConnection, DbCommands: _dbCommands));
153+
}
139154
}
140155
else
141156
{
142-
DbConnections.Release((Number: _number, DbConnection: _dbConnection, DbCommands: _dbCommands));
157+
_dbConnection.Dispose();
143158
}
144159
}
145160

frameworks/CSharp/appmpower/src/appMpower.Orm/Data/DbFactory.cs

Lines changed: 45 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -5,47 +5,63 @@ namespace appMpower.Orm.Data
55
{
66
public static class DbFactory
77
{
8-
public static string ConnectionString;
8+
public static string ConnectionString;
9+
public static DbProviderFactory Instance;
910

10-
#if ADO
11-
#if MYSQL
12-
public static DbProviderFactory Instance = MySqlConnector.MySqlConnectorFactory.Instance;
13-
#else
14-
public static DbProviderFactory Instance = Npgsql.NpgsqlFactory.Instance;
15-
#endif
16-
#else
17-
public static DbProviderFactory Instance = System.Data.Odbc.OdbcFactory.Instance;
18-
#endif
19-
20-
public static System.Data.Common.DbConnection GetConnection()
11+
public static System.Data.Common.DbConnection GetConnection(string? connectionString = null)
2112
{
2213
System.Data.Common.DbConnection dbConnection = Instance.CreateConnection();
23-
dbConnection.ConnectionString = ConnectionString;
14+
dbConnection.ConnectionString = connectionString ?? ConnectionString;
2415

2516
return dbConnection;
2617
}
2718

2819
public static void SetConnectionString()
2920
{
30-
if (Constants.Dbms == Dbms.MySQL)
21+
if (Constants.DbProvider == DbProvider.ODBC)
22+
{
23+
if (Constants.Dbms == Dbms.MySQL)
24+
{
25+
ConnectionString = "Driver={MariaDB};Server=tfb-database;Database=hello_world;Uid=benchmarkdbuser;Pwd=benchmarkdbpass;Pooling=false;OPTIONS=67108864;FLAG_FORWARD_CURSOR=1;sslmode=DISABLED;CharSet=utf8;";
26+
Console.WriteLine("hey odbc mysql");
27+
}
28+
else
29+
{
30+
ConnectionString = "Driver={PostgreSQL};Server=tfb-database;Database=hello_world;Uid=benchmarkdbuser;Pwd=benchmarkdbpass;UseServerSidePrepare=1;Pooling=false;sslmode=disable";
31+
Console.WriteLine("hey odbc postgresql");
32+
}
33+
}
34+
else if (Constants.DbProvider == DbProvider.ADO)
3135
{
32-
#if ADO
33-
ConnectionString = "Server=tfb-database;Database=hello_world;User Id=benchmarkdbuser;Password=benchmarkdbpass;Maximum Pool Size=1024;SslMode=None;ConnectionReset=false;ConnectionIdlePingTime=900;ConnectionIdleTimeout=0;AutoEnlist=false;DefaultCommandTimeout=0;ConnectionTimeout=0;IgnorePrepare=false;";
34-
Console.WriteLine("hey ado mysql");
35-
#else
36-
ConnectionString = "Driver={MariaDB};Server=tfb-database;Database=hello_world;Uid=benchmarkdbuser;Pwd=benchmarkdbpass;Pooling=false;OPTIONS=67108864;FLAG_FORWARD_CURSOR=1;sslmode=DISABLED;CharSet=utf8;";
37-
Console.WriteLine("hey odbc mysql");
38-
#endif
36+
if (Constants.Dbms == Dbms.MySQL)
37+
{
38+
ConnectionString = "Server=tfb-database;Database=hello_world;User Id=benchmarkdbuser;Password=benchmarkdbpass;Maximum Pool Size=1024;SslMode=None;ConnectionReset=false;ConnectionIdlePingTime=900;ConnectionIdleTimeout=0;AutoEnlist=false;DefaultCommandTimeout=0;ConnectionTimeout=0;IgnorePrepare=false;";
39+
Console.WriteLine("hey ado mysql");
40+
}
41+
else
42+
{
43+
ConnectionString = "Server=tfb-database;Database=hello_world;User Id=benchmarkdbuser;Password=benchmarkdbpass;Maximum Pool Size=1024;NoResetOnClose=true;Enlist=false;Max Auto Prepare=3;";
44+
Console.WriteLine("hey ado postgresql");
45+
}
3946
}
40-
else
47+
}
48+
49+
public static void SetInstance()
50+
{
51+
if (Constants.DbProvider == DbProvider.ODBC)
52+
{
53+
Instance = System.Data.Odbc.OdbcFactory.Instance;
54+
}
55+
else if (Constants.DbProvider == DbProvider.ADO)
4156
{
42-
#if ADO
43-
ConnectionString = "Server=tfb-database;Database=hello_world;User Id=benchmarkdbuser;Password=benchmarkdbpass;Maximum Pool Size=1024;NoResetOnClose=true;Enlist=false;Max Auto Prepare=3";
44-
Console.WriteLine("hey ado postgresql");
45-
#else
46-
ConnectionString = "Driver={PostgreSQL};Server=tfb-database;Database=hello_world;Uid=benchmarkdbuser;Pwd=benchmarkdbpass;UseServerSidePrepare=1;Pooling=false;sslmode=disable";
47-
Console.WriteLine("hey odbc postgresql");
48-
#endif
57+
if (Constants.Dbms == Dbms.MySQL)
58+
{
59+
Instance = MySqlConnector.MySqlConnectorFactory.Instance;
60+
}
61+
else
62+
{
63+
Instance = Npgsql.NpgsqlFactory.Instance;
64+
}
4965
}
5066
}
5167
}

frameworks/CSharp/appmpower/src/appMpower.Orm/NativeMethods.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,13 +29,15 @@ public static void Dbms(int dbms)
2929
{
3030
Constants.Dbms = (Dbms)dbms;
3131
DbFactory.SetConnectionString();
32+
DbFactory.SetInstance();
3233
}
3334

3435
[UnmanagedCallersOnly(EntryPoint = "DbProvider")]
3536
public static void DbProvider(int dbProvider)
3637
{
3738
Constants.DbProvider = (DbProvider)dbProvider;
3839
DbFactory.SetConnectionString();
40+
DbFactory.SetInstance();
3941
}
4042

4143
[UnmanagedCallersOnly(EntryPoint = "FreeHandlePointer")]

frameworks/CSharp/appmpower/src/appMpower.Orm/RawDb.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,9 @@ public static List<Fortune> LoadFortunesRows()
8686
id: dataReader.GetInt32(0),
8787
//MariaDB ODBC connector does not correctly support Japanese characters in combination with default ADO.NET;
8888
//as a solution we custom read this string
89-
message: (Constants.Dbms == Dbms.MySQL ? ReadColumn(dataReader, 1) : dataReader.GetString(1))
89+
message: (Constants.Dbms == Dbms.MySQL && Constants.DbProvider == DbProvider.ODBC ?
90+
ReadColumn(dataReader, 1) :
91+
dataReader.GetString(1))
9092
));
9193
}
9294

frameworks/CSharp/appmpower/src/appMpower.Orm/appMpower.Orm.csproj

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -61,12 +61,4 @@
6161
<PackageReference Include="Npgsql" Version="10.0.0" />
6262
<PackageReference Include="MySqlConnector" Version="2.5.0" />
6363
</ItemGroup>
64-
65-
<PropertyGroup>
66-
<DefineConstants Condition=" '$(Driver)' == 'ado' ">$(DefineConstants);ADO</DefineConstants>
67-
<DefineConstants Condition=" '$(Driver)' == 'odbc' ">$(DefineConstants);ODBC</DefineConstants>
68-
<DefineConstants Condition=" '$(Database)' == 'postgresql' ">$(DefineConstants);POSTGRESQL</DefineConstants>
69-
<DefineConstants Condition=" '$(Database)' == 'mysql' ">$(DefineConstants);MYSQL</DefineConstants>
70-
</PropertyGroup>
71-
7264
</Project>

0 commit comments

Comments
 (0)