Tôi gặp lỗi khi cố gắng kết nối với cơ sở dữ liệu Oracle 10g từ xa từ ứng dụng C# 2008 Express Edition. Tôi đang cố gắng sử dụng một cách tiếp cận tối giản, không xâm nhập để phát triển với một cái nhìn để triển khai ClickOnce đến các máy trạm của người dùng.Lỗi khi cố gắng kết nối với cơ sở dữ liệu Oracle 10g từ chương trình C# sử dụng cấu hình thiết lập tối thiểu
Đối trên, chúng tôi đã điều tra các tài liệu sau (giữa những người khác ..) -
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#
Khi xem lỗi tôi đã gặp phải, tôi đã tạo một ứng dụng thử nghiệm đơn giản. bao gồm một trang đơn (wpf) chỉ với một nút. Trong nhấp sự kiện của nút tôi cố gắng để tạo ra một kết nối đến một cơ sở dữ liệu 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();
}
}
}
Tiếp nối thông tin trong các bài viết ở trên tôi đã chắc chắn rằng các DLL sau của là trong tôi thư mục "bin" -
• oci.dll
• ociw32.dll
• orannzsbb10.dll
• oraocci10.dll
• oraociicus.dll
• msvcr71.dll
(tên cuối cùng trong tuyệt vọng ...) và đã tham chiếu 'Oracle.DataAccess.dll'.
Các thông báo lỗi (tại 'catch (OracleException dbEx)') là -
"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();'.
Bên cạnh đó, đây là báo cáo -
"((Oracle.DataAccess.Client.OracleException)($exception)).DataSource' threw an exception of type 'System.NullReferenceException".
Tôi giả định từ NullReferenceException trong nguồn dữ liệu mà vấn đề nằm trong một trong những dlls '(?) như tôi' mới 'OracleConnection ở trên trước khi cố gắng tham khảo nó.
Ngoài ra, việc thực thi mã sẽ nhảy 'catch (NullReferenceException nullExcept)' và đi thẳng đến bắt OracleException.
Xin lỗi vì đã đánh bạc nhưng hy vọng điều này có ý nghĩa? Bất kỳ trợ giúp/lời khuyên nào được đánh giá cao!
Can bạn ping 'myServer'? bạn đã thử kết nối thông qua sqlplus? – V4Vendetta
Bạn có thể tnsping 'myOracleDb'? – Shai
'NullReferenceException' không phải là nguyên nhân của sự cố. Nó xảy ra khi bạn kiểm tra ngoại lệ trong VisualStudio. Đó là một tạo phẩm gỡ lỗi và có thể bỏ qua. Thật không may, ngoại lệ thực sự dường như không chứa thông báo lỗi nào. Hay bạn đã bỏ qua nó ở đâu đó? – Codo