Występuje błąd podczas próby połączenia ze zdalną bazą danych Oracle 10g z rozwijanej przeze mnie aplikacji C# 2008 Express Edition. Próbuję użyć minimalistycznego, nieinwazyjnego podejścia do rozwoju z myślą o wdrożeniu ClickOnce na stacjach roboczych użytkowników.Błąd podczas próby połączenia z bazą danych Oracle 10g z poziomu programu C# z minimalną konfiguracją
W związku z powyższym mam badane następujące dokumenty (między innymi ..) -
What is the minimal setup required to deploy a .NET application with Oracle client 11?
http://jeremybranham.wordpress.com/2011/04/25/oracle-instant-client-with-odp-net/
http://ora-00001.blogspot.com/2010/01/odpnet-minimal-non-intrusive-install.html
http://splinter.com.au/using-the-new-odpnet-to-access-oracle-from-c
Connect to Oracle with odp.net and the OCI from C#
W związku z występującym błędem utworzyłem prostą aplikację testową. składający się z jednej strony (wpf) z jednym przyciskiem. W kliknięciem przypadku przycisku próbuję utworzyć połączenie z bazą danych Oracle -
private void button1_Click(object sender, RoutedEventArgs e)
{
OracleConnection oraConnect;
// string previously used OK in other projects
string connectionString = "Data Source=" +
"(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = myServer)(PORT = 1521)))" +
"(CONNECT_DATA =(SERVICE_NAME = myOracleDb)))" +
";Password=myPw;User ID=myID;";
using (oraConnect = new OracleConnection(connectionString))
{
try
{
if (oraConnect.State == ConnectionState.Closed)
{
oraConnect.Open();
MessageBox.Show("oraConnect is attempting to open..");
}
else
MessageBox.Show("oraConnect open to DB: " + oraConnect.ServerVersion.ToString());
}
catch (NullReferenceException nullExcept)
{
MessageBox.Show("Caught error: ." + nullExcept.ToString());
}
catch (OracleException dbEx)
{
MessageBox.Show("OraException - " + dbEx.Message.ToString());
}
catch (Exception ex)
{
Exception current;
current = ex;
while (current != null)
{
current = current.InnerException;
}
MessageBox.Show("Db base exception - " + ex.GetBaseException().ToString());
}
finally
{
oraConnect.Close();
}
}
}
następstwie informacji w powyższych artykułach mam zapewnione, że po DLL są w moim katalogu „bin” -
• oci.dll
• ociw32.dll
• orannzsbb10.dll
• oraocci10.dll
• oraociicus.dll
• msvcr71.dll
(ostatni nazwany w desperacji ...) i odwołał się do "Oracle.DataAccess.dll".
Komunikat o błędzie (na 'catch (OracleException dbEx)') jest -
"Oracle.DataAccess.Client.OracleException was caught
Message=""
StackTrace:
at Oracle.DataAccess.Client.OracleException.HandleErrorHelper(Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, String procedure)
at Oracle.DataAccess.Client.OracleException.HandleError(Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, Object src)
at Oracle.DataAccess.Client.OracleConnection.Open()
at OracleConnectionTest.Window1.button1_Click(Object sender, RoutedEventArgs e) in C:\Documents\Visual Studio 2008\Projects\OracleConnectionTest\OracleConnectionTest\Window1.xaml.cs:line 69
InnerException: "
Line 69 is 'oraConnect.Open();'.
Ponadto następuje zgłaszane -
"((Oracle.DataAccess.Client.OracleException)($exception)).DataSource' threw an exception of type 'System.NullReferenceException".
Jestem zakładając od wewnątrz NullReferenceException źródło danych, że problem leży w jednym z bibliotek DLL (?), ponieważ jestem "nowy" OracleConnection powyżej, zanim spróbuję go odnieść.
Ponadto wykonanie kodu powoduje przejście do "catch (NullReferenceException nullExcept)" i przechodzi bezpośrednio do catchu OracleException.
Przepraszam za wędrówkę, ale mam nadzieję, że ma to sens? Każda pomoc/rada doceniona!
Czy ty ping 'myServer'? czy próbowałeś połączyć się przez sqlplus? – V4Vendetta
Czy możesz tnsping "myOracleDb"? – Shai
Wyjątek "NullReferenceException" nie jest przyczyną problemu. Występuje, gdy sprawdzasz wyjątek w VisualStudio. To artefakt do debugowania i można go zignorować. Niestety, prawdziwy wyjątek wydaje się nie zawierać żadnych komunikatów o błędach. A może przeoczyłeś to gdzieś? – Codo