Skip to content

Commit 91f5068

Browse files
committed
Change connection string when closed. Fixes #543
1 parent 8cf99bd commit 91f5068

File tree

2 files changed

+57
-5
lines changed

2 files changed

+57
-5
lines changed

src/MySqlConnector/MySql.Data.MySqlClient/MySqlConnection.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -201,8 +201,9 @@ public override string ConnectionString
201201
}
202202
set
203203
{
204-
if (m_hasBeenOpened)
205-
throw new InvalidOperationException("Cannot change connection string on a connection that has already been opened.");
204+
if (m_connectionState == ConnectionState.Open)
205+
throw new InvalidOperationException("Cannot change the connection string on an open connection.");
206+
m_hasBeenOpened = false;
206207
m_connectionString = value;
207208
}
208209
}

tests/SideBySide/ConnectSync.cs

Lines changed: 54 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -112,9 +112,11 @@ public void ConnectBadPassword()
112112
}
113113

114114
[Theory]
115-
[InlineData(false)]
116-
[InlineData(true)]
117-
public void PersistSecurityInfo(bool persistSecurityInfo)
115+
[InlineData(false, false)]
116+
[InlineData(true, false)]
117+
[InlineData(false, true)]
118+
[InlineData(true, true)]
119+
public void PersistSecurityInfo(bool persistSecurityInfo, bool closeConnection)
118120
{
119121
var csb = AppConfig.CreateConnectionStringBuilder();
120122
csb.PersistSecurityInfo = persistSecurityInfo;
@@ -128,6 +130,15 @@ public void PersistSecurityInfo(bool persistSecurityInfo)
128130
Assert.Equal(csb.ConnectionString, connection.ConnectionString);
129131
else
130132
Assert.Equal(connectionStringWithoutPassword, connection.ConnectionString);
133+
134+
if (closeConnection)
135+
{
136+
connection.Close();
137+
if (persistSecurityInfo)
138+
Assert.Equal(csb.ConnectionString, connection.ConnectionString);
139+
else
140+
Assert.Equal(connectionStringWithoutPassword, connection.ConnectionString);
141+
}
131142
}
132143
}
133144

@@ -354,6 +365,46 @@ private static string QueryCurrentDatabase(MySqlConnection connection)
354365
}
355366
}
356367

368+
[SkippableFact(ConfigSettings.SecondaryDatabase)]
369+
public void ChangeConnectionStringWhenOpen()
370+
{
371+
var csb = AppConfig.CreateConnectionStringBuilder();
372+
using (var connection = new MySqlConnection(csb.ConnectionString))
373+
{
374+
connection.Open();
375+
Assert.Equal(csb.Database, connection.Database);
376+
377+
csb.Database = AppConfig.SecondaryDatabase;
378+
#if BASELINE
379+
Assert.Throws<MySqlException>(() =>
380+
#else
381+
Assert.Throws<InvalidOperationException>(() =>
382+
#endif
383+
{
384+
connection.ConnectionString = csb.ConnectionString;
385+
});
386+
}
387+
}
388+
389+
[SkippableFact(ConfigSettings.SecondaryDatabase)]
390+
public void ChangeConnectionStringAfterClose()
391+
{
392+
var csb = AppConfig.CreateConnectionStringBuilder();
393+
using (var connection = new MySqlConnection(csb.ConnectionString))
394+
{
395+
connection.Open();
396+
Assert.Equal(csb.Database, connection.Database);
397+
connection.Close();
398+
399+
csb.Database = AppConfig.SecondaryDatabase;
400+
connection.ConnectionString = csb.ConnectionString;
401+
402+
connection.Open();
403+
Assert.Equal(csb.Database, connection.Database);
404+
connection.Close();
405+
}
406+
}
407+
357408
[SkippableFact(ServerFeatures.Sha256Password, ConfigSettings.RequiresSsl)]
358409
public void Sha256WithSecureConnection()
359410
{

0 commit comments

Comments
 (0)