Description:
Hi people,
I'm connecting to my MySQL db on Linux RH9.1 through MyODBC 3.51.06 from Win2000 with program written in C#.
Following the source code of library I'm written down to execute queries:
public void Select(string sql_what, string sql_from, string sql_clause)
{
//E.g. Select("Colonna_1, Colonna_2", "Tabella_1", "Colonna_1 = 'pippo'")
string select_sql = "SELECT "+sql_what+" FROM "+sql_from+" "+sql_clause;
bool ok = false;
int retries = 0;
while ((!ok) && (retries < n_max_retries))
{
ok = false;
try
{
OdbcConnection dbConn = new OdbcConnection("DSN=mydb;");
dbConn.Open();
OdbcCommand myAccessCommand = new OdbcCommand(select_sql, dbConn);
OdbcDataAdapter myDataAdapter = new OdbcDataAdapter(myAccessCommand);
myDataSet = new DataSet();
try
{
myDataAdapter.Fill(myDataSet, sql_from); // $$$$ HERE IS ERROR
ok = true;
}
catch
{
ok = false;
}
finally
{
myDataAdapter.Dispose();
dbConn.Close();
}
currentTable = myDataSet.Tables[sql_from];
}
catch //(Exception e)
{
ok = false;
}
retries++;
}
if (!ok)
{
// server disconnected;
throw new ApplicationException("Select server Error");
}
}
The problem consists in that:
1 - first of all I try to get data from the server correctly
2 - then I disconnect the LAN
3 - when I try to get other data from the server the program blocks to
>>> myDataAdapter.Fill(myDataSet, sql_from); // $$$$ HERE IS ERROR
with no exceptions thrown!!! neither error code returned back!!!
Thanks.
How to repeat:
Hi people,
I'm connecting to my MySQL db on Linux RH9.1 through MyODBC 3.51.06 from Win2000 with program written in C#.
Following the source code of library I'm written down to execute queries:
public void Select(string sql_what, string sql_from, string sql_clause)
{
//E.g. Select("Colonna_1, Colonna_2", "Tabella_1", "Colonna_1 = 'pippo'")
string select_sql = "SELECT "+sql_what+" FROM "+sql_from+" "+sql_clause;
bool ok = false;
int retries = 0;
while ((!ok) && (retries < n_max_retries))
{
ok = false;
try
{
OdbcConnection dbConn = new OdbcConnection("DSN=mydb;");
dbConn.Open();
OdbcCommand myAccessCommand = new OdbcCommand(select_sql, dbConn);
OdbcDataAdapter myDataAdapter = new OdbcDataAdapter(myAccessCommand);
myDataSet = new DataSet();
try
{
myDataAdapter.Fill(myDataSet, sql_from); // $$$$ HERE IS ERROR
ok = true;
}
catch
{
ok = false;
}
finally
{
myDataAdapter.Dispose();
dbConn.Close();
}
currentTable = myDataSet.Tables[sql_from];
}
catch //(Exception e)
{
ok = false;
}
retries++;
}
if (!ok)
{
// server disconnected;
throw new ApplicationException("Select server Error");
}
}
The problem consists in that:
1 - first of all I try to get data from the server correctly
2 - then I disconnect the LAN
3 - when I try to get other data from the server the program blocks to
>>> myDataAdapter.Fill(myDataSet, sql_from); // $$$$ HERE IS ERROR
with no exceptions thrown!!! neither error code returned back!!!
Thanks.
Suggested fix:
To work around the problem I have inserted a Server check before the DataAdapter.Fill method which opens a socket to the Http port. If the server doesn't respond an ApplicationException will be thrown.
Here is the code:
public void CheckServer(string url)
{
System.Text.Encoding ASCII = System.Text.Encoding.ASCII;
string Get = "GET / HTTP/1.1\r\nHost: " + url +
"\r\nConnection: Close\r\n\r\n";
Byte[] ByteGet = ASCII.GetBytes(Get);
Byte[] RecvBytes = new Byte[256];
IPEndPoint EPhost = new IPEndPoint(IPAddress.Parse(url), 80);
Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp );
s.Connect(EPhost);
if (!s.Connected)
{
throw new ApplicationException("Unable to connect to host");
}
s.Close();
}
public void Select(string sql_what, string sql_from, string sql_clause)
{
//E.g. Select("Colonna_1, Colonna_2", "Tabella_1", "Colonna_1 = 'pippo'")
string select_sql = "SELECT "+sql_what+" FROM "+sql_from+" "+sql_clause;
bool ok = false;
int retries = 0;
while ((!ok) && (retries < n_max_retries))
{
ok = false;
try
{
OdbcConnection dbConn = new OdbcConnection("DSN=mydb;");
dbConn.Open();
OdbcCommand myAccessCommand = new OdbcCommand(select_sql, dbConn);
OdbcDataAdapter myDataAdapter = new OdbcDataAdapter(myAccessCommand);
myDataSet = new DataSet();
try
{
CheckServer(url_server);
myDataAdapter.Fill(myDataSet, sql_from); // $$$$ HERE IS ERROR
ok = true;
}
catch
{
ok = false;
}
finally
{
myDataAdapter.Dispose();
dbConn.Close();
}
currentTable = myDataSet.Tables[sql_from];
}
catch //(Exception e)
{
ok = false;
}
retries++;
}
if (!ok)
{
// server disconnected;
throw new ApplicationException("Select server Error");
}
}
Description: Hi people, I'm connecting to my MySQL db on Linux RH9.1 through MyODBC 3.51.06 from Win2000 with program written in C#. Following the source code of library I'm written down to execute queries: public void Select(string sql_what, string sql_from, string sql_clause) { //E.g. Select("Colonna_1, Colonna_2", "Tabella_1", "Colonna_1 = 'pippo'") string select_sql = "SELECT "+sql_what+" FROM "+sql_from+" "+sql_clause; bool ok = false; int retries = 0; while ((!ok) && (retries < n_max_retries)) { ok = false; try { OdbcConnection dbConn = new OdbcConnection("DSN=mydb;"); dbConn.Open(); OdbcCommand myAccessCommand = new OdbcCommand(select_sql, dbConn); OdbcDataAdapter myDataAdapter = new OdbcDataAdapter(myAccessCommand); myDataSet = new DataSet(); try { myDataAdapter.Fill(myDataSet, sql_from); // $$$$ HERE IS ERROR ok = true; } catch { ok = false; } finally { myDataAdapter.Dispose(); dbConn.Close(); } currentTable = myDataSet.Tables[sql_from]; } catch //(Exception e) { ok = false; } retries++; } if (!ok) { // server disconnected; throw new ApplicationException("Select server Error"); } } The problem consists in that: 1 - first of all I try to get data from the server correctly 2 - then I disconnect the LAN 3 - when I try to get other data from the server the program blocks to >>> myDataAdapter.Fill(myDataSet, sql_from); // $$$$ HERE IS ERROR with no exceptions thrown!!! neither error code returned back!!! Thanks. How to repeat: Hi people, I'm connecting to my MySQL db on Linux RH9.1 through MyODBC 3.51.06 from Win2000 with program written in C#. Following the source code of library I'm written down to execute queries: public void Select(string sql_what, string sql_from, string sql_clause) { //E.g. Select("Colonna_1, Colonna_2", "Tabella_1", "Colonna_1 = 'pippo'") string select_sql = "SELECT "+sql_what+" FROM "+sql_from+" "+sql_clause; bool ok = false; int retries = 0; while ((!ok) && (retries < n_max_retries)) { ok = false; try { OdbcConnection dbConn = new OdbcConnection("DSN=mydb;"); dbConn.Open(); OdbcCommand myAccessCommand = new OdbcCommand(select_sql, dbConn); OdbcDataAdapter myDataAdapter = new OdbcDataAdapter(myAccessCommand); myDataSet = new DataSet(); try { myDataAdapter.Fill(myDataSet, sql_from); // $$$$ HERE IS ERROR ok = true; } catch { ok = false; } finally { myDataAdapter.Dispose(); dbConn.Close(); } currentTable = myDataSet.Tables[sql_from]; } catch //(Exception e) { ok = false; } retries++; } if (!ok) { // server disconnected; throw new ApplicationException("Select server Error"); } } The problem consists in that: 1 - first of all I try to get data from the server correctly 2 - then I disconnect the LAN 3 - when I try to get other data from the server the program blocks to >>> myDataAdapter.Fill(myDataSet, sql_from); // $$$$ HERE IS ERROR with no exceptions thrown!!! neither error code returned back!!! Thanks. Suggested fix: To work around the problem I have inserted a Server check before the DataAdapter.Fill method which opens a socket to the Http port. If the server doesn't respond an ApplicationException will be thrown. Here is the code: public void CheckServer(string url) { System.Text.Encoding ASCII = System.Text.Encoding.ASCII; string Get = "GET / HTTP/1.1\r\nHost: " + url + "\r\nConnection: Close\r\n\r\n"; Byte[] ByteGet = ASCII.GetBytes(Get); Byte[] RecvBytes = new Byte[256]; IPEndPoint EPhost = new IPEndPoint(IPAddress.Parse(url), 80); Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp ); s.Connect(EPhost); if (!s.Connected) { throw new ApplicationException("Unable to connect to host"); } s.Close(); } public void Select(string sql_what, string sql_from, string sql_clause) { //E.g. Select("Colonna_1, Colonna_2", "Tabella_1", "Colonna_1 = 'pippo'") string select_sql = "SELECT "+sql_what+" FROM "+sql_from+" "+sql_clause; bool ok = false; int retries = 0; while ((!ok) && (retries < n_max_retries)) { ok = false; try { OdbcConnection dbConn = new OdbcConnection("DSN=mydb;"); dbConn.Open(); OdbcCommand myAccessCommand = new OdbcCommand(select_sql, dbConn); OdbcDataAdapter myDataAdapter = new OdbcDataAdapter(myAccessCommand); myDataSet = new DataSet(); try { CheckServer(url_server); myDataAdapter.Fill(myDataSet, sql_from); // $$$$ HERE IS ERROR ok = true; } catch { ok = false; } finally { myDataAdapter.Dispose(); dbConn.Close(); } currentTable = myDataSet.Tables[sql_from]; } catch //(Exception e) { ok = false; } retries++; } if (!ok) { // server disconnected; throw new ApplicationException("Select server Error"); } }