2016-12-01 6 views
2

Hilfe bitte mit meinem Problem. Ich bekomme einen Fehler, wenn Daten von Oracle DB auf der Webseite über asp: SqlDataSource und asp: ListView "zeichnen".ASP.Net C# - SqlDataSource und Oracle: Der Netzwerkpfad wurde nicht gefunden

Ich benutze ODP.Net Treiber und es funktioniert gut (Ich habe viele SELECT und UPDATE Abfragen \ Befehle in Code-Behind und sie arbeiten!). Aber wenn Seite muss gemacht werden, sagt: "Der Netzwerkpfad nicht gefunden wurde"

Exception Details: System.ComponentModel.Win32Exception: The network path was not found 

[Win32Exception (0x80004005): The network path was not found] 

[SqlException (0x80131904): A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: Named Pipes Provider, error: 40 - Could not open a connection to SQL Server)] 
    System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction) +5341687 
    System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose) +546 
    System.Data.SqlClient.TdsParser.Connect(ServerInfo serverInfo, SqlInternalConnectionTds connHandler, Boolean ignoreSniOpenTimeout, Int64 timerExpire, Boolean encrypt, Boolean trustServerCert, Boolean integratedSecurity, Boolean withFailover) +5353471 
    System.Data.SqlClient.SqlInternalConnectionTds.AttemptOneLogin(ServerInfo serverInfo, String newPassword, SecureString newSecurePassword, Boolean ignoreSniOpenTimeout, TimeoutTimer timeout, Boolean withFailover) +145 
    System.Data.SqlClient.SqlInternalConnectionTds.LoginNoFailover(ServerInfo serverInfo, String newPassword, SecureString newSecurePassword, Boolean redirectedUserInstance, SqlConnectionString connectionOptions, SqlCredential credential, TimeoutTimer timeout) +923 
    System.Data.SqlClient.SqlInternalConnectionTds.OpenLoginEnlist(TimeoutTimer timeout, SqlConnectionString connectionOptions, SqlCredential credential, String newPassword, SecureString newSecurePassword, Boolean redirectedUserInstance) +311 
    System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity identity, SqlConnectionString connectionOptions, SqlCredential credential, Object providerInfo, String newPassword, SecureString newSecurePassword, Boolean redirectedUserInstance, SqlConnectionString userConnectionOptions, SessionData reconnectSessionData) +646 
    System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions options, DbConnectionPoolKey poolKey, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection, DbConnectionOptions userOptions) +278 
    System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnectionPool pool, DbConnection owningObject, DbConnectionOptions options, DbConnectionPoolKey poolKey, DbConnectionOptions userOptions) +38 
    System.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnection owningObject, DbConnectionOptions userOptions, DbConnectionInternal oldConnection) +732 
    System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnection owningObject, DbConnectionOptions userOptions, DbConnectionInternal oldConnection) +85 
    System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, UInt32 waitForMultipleObjectsTimeout, Boolean allowCreate, Boolean onlyOneCheckConnection, DbConnectionOptions userOptions, DbConnectionInternal& connection) +1057 
    System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal& connection) +78 
    System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal oldConnection, DbConnectionInternal& connection) +196 
    System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions) +146 
    System.Data.ProviderBase.DbConnectionClosed.TryOpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions) +16 
    System.Data.SqlClient.SqlConnection.TryOpenInner(TaskCompletionSource`1 retry) +94 
    System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource`1 retry) +110 
    System.Data.SqlClient.SqlConnection.Open() +96 
    System.Data.Common.DbDataAdapter.FillInternal(DataSet dataset, DataTable[] datatables, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior) +121 
    System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior) +316 
    System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, String srcTable) +86 
    System.Web.UI.WebControls.SqlDataSourceView.ExecuteSelect(DataSourceSelectArguments arguments) +1474 
    System.Web.UI.DataSourceView.Select(DataSourceSelectArguments arguments, DataSourceViewSelectCallback callback) +21 
    System.Web.UI.WebControls.DataBoundControl.PerformSelect() +138 
    System.Web.UI.WebControls.ListView.PerformSelect() +167 
    System.Web.UI.WebControls.BaseDataBoundControl.DataBind() +30 
    System.Web.UI.WebControls.BaseDataBoundControl.EnsureDataBound() +105 
    System.Web.UI.WebControls.ListView.CreateChildControls() +122 
    System.Web.UI.Control.EnsureChildControls() +83 
    System.Web.UI.Control.PreRenderRecursiveInternal() +42 
    System.Web.UI.Control.PreRenderRecursiveInternal() +155 
    System.Web.UI.Control.PreRenderRecursiveInternal() +155 
    System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +974 

Verbindungszeichenfolge (web.config):

<add name="OracleDB" connectionString="Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=srv00)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=seln)));User Id=USR;Password=Password.USR;" /> 

SqlDataSource Code:

<asp:SqlDataSource ID="SqlDataSource1" ConnectionString="<%$ ConnectionStrings:OracleDB %>" runat="server" 
    SelectCommand="SELECT Field1, Field2, Field3 FROM ban.fj_table WHERE Field1= :Field1" 

Und SELECT-Parameter von SqlDataSource:

<SelectParameters> 
    <asp:ControlParameter Name="Field1" ControlID="CntrlName" PropertyName="SelectedValue" /> 
</SelectParameters> 

Es gibt keinen Code in Code-Behind für diesen Vorgang. Danke für jede Hilfe .. Und Entschuldigung für schlechte eng (:

+0

Wo ist der providerName in Ihrer SqlDataSource? Siehe https://msdn.microsoft.com/en-us/library/92ceczx1(v=vs.85).aspx Ohne diese Angabe kann Ihre SqlDataSource nicht wissen, welche Bibliothek Sql Server verwendet und standardmäßig verwendet. – Steve

+0

Sie versuchen, eine Verbindung zu einer Oracle DB mithilfe der .NET-Code-Bibliotheken für den Zugriff auf SQL Server herzustellen. Verwenden Sie stattdessen die Oracle-Bibliotheken. – ADyson

+0

@Igor, ich habe "mit Oracle.ManagedDataAccess.Client;" und Asp: SqlDataSource muss mit Oracle arbeiten: https://msdn.microsoft.com/ru-ru/library/92ceczx1(v=vs.85).aspx – SPNick

Antwort

0

Die Kommentare von ADyson und Steve löste das Problem für mich, aber wegen des fehlenden Formats der Kommentare, wollte ich es als eine "echte" Post Antwort.

Angenommen, Ihre Verbindungszeichenfolge korrekt ist, wird das Problem verursacht durch nicht die richtigen Anbieter Namen angeben und ASP.NET wird es annehmen, ist SQL Server.

der Provider Name, den Sie verwenden müssen, ist "Oracle .DataAccess.Client ". Sie müssen möglicherweise auch die Referenz zu" Oracle.DataAccess "zu Ihrem Profi hinzufügen zuerst, wenn Sie dies noch nicht getan haben.

<asp:SqlDataSource 
    ID="SqlDataSource1" 
    ConnectionString="<%$ ConnectionStrings:OracleDB %>" 
    runat="server" 
    ProviderName="Oracle.DataAccess.Client" 
    SelectCommand="SELECT Field1, Field2, Field3 FROM ban.fj_table WHERE Field1= :Field1"> 
</asp:SqlDataSource> 

Beachten Sie, dass Visual Studio könnte "System.Data.OracleClient" als Anbieter Name schon sagt, aber dies führte zu

System.Data.OracleClient.OracleException: ORA-00903: ungültige Tabellenname

So Sie müssen die Anbieter von Oracle verwenden.

+0

Which reading the ADO.NET Handbuch und Tutorials ist eine gute Idee –

+0

@ PanagiotisKanavos Bu Wer hat Zeit dafür? Es ist viel schneller, ein DevExpress-Beispielprojekt zu ändern und die Fehlermeldungen zu googlen, bis es funktioniert. Oh, Moment mal ... – Sentry

Verwandte Themen