2010-04-24 80 views
1

我有一個32位XP運行VS 2008,我試圖從我的C#ASPX文件中的web.config文件解密我的連接字符串。如何訪問C#中的web.config連接字符串?

即使沒有返回錯誤,我當前的連接字符串也不會顯示我選擇的AdventureWorks存儲過程的內容。

我進入它:

C:\Program Files\Microsoft Visual Studio 9.0\VC>Aspnet_regiis.exe -pe "connectionStrings" -app "/AddFileToSQL2" 

然後它說: 「成功」。

我的web.config部分,看起來像:

<connectionStrings> 
    <add name="Master" connectionString="server=MSSQLSERVER;database=Master; Integrated Security=SSPI" 
     providerName="System.Data.SqlClient" /> 
    <add name="AdventureWorksConnectionString" connectionString="Data Source=SIDEKICK;Initial Catalog=AdventureWorks;Integrated Security=True" 
     providerName="System.Data.SqlClient" /> 
     <add name="AdventureWorksConnectionString2" connectionString="Data Source=SIDEKICK;Initial Catalog=AdventureWorks;Persist Security Info=true; " 
    providerName="System.Data.SqlClient" /> 
    </connectionStrings> 

而我的C#代碼背後的樣子:

string connString = ConfigurationManager.ConnectionStrings["AdventureWorksConnectionString2"].ConnectionString; 

有什麼不對的連接字符串在web.config或C#代碼在文件後面?

我在C#代碼中設置一個斷點後面,現在我得到下面的異常:

System.Data.SqlClient.SqlException was caught 
    Message="Login failed for user ''." 
    Source=".Net SqlClient Data Provider" 
    ErrorCode=-2146232060 
    Class=14 
    LineNumber=65536 
    Number=18456 
    Procedure="" 
    Server="SIDEKICK" 
    State=1 
    StackTrace: 
     at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection) 
     at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj) 
     at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj) 
     at System.Data.SqlClient.SqlInternalConnectionTds.CompleteLogin(Boolean enlistOK) 
     at System.Data.SqlClient.SqlInternalConnectionTds.AttemptOneLogin(ServerInfo serverInfo, String newPassword, Boolean ignoreSniOpenTimeout, Int64 timerExpire, SqlConnection owningObject) 
     at System.Data.SqlClient.SqlInternalConnectionTds.LoginNoFailover(String host, String newPassword, Boolean redirectedUserInstance, SqlConnection owningObject, SqlConnectionString connectionOptions, Int64 timerStart) 
     at System.Data.SqlClient.SqlInternalConnectionTds.OpenLoginEnlist(SqlConnection owningObject, SqlConnectionString connectionOptions, String newPassword, Boolean redirectedUserInstance) 
     at System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity identity, SqlConnectionString connectionOptions, Object providerInfo, String newPassword, SqlConnection owningObject, Boolean redirectedUserInstance) 
     at System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions options, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection) 
     at System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnection owningConnection, DbConnectionPool pool, DbConnectionOptions options) 
     at System.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnection owningObject) 
     at System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnection owningObject) 
     at System.Data.ProviderBase.DbConnectionPool.GetConnection(DbConnection owningObject) 
     at System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection) 
     at System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory) 
     at System.Data.SqlClient.SqlConnection.Open() 
     at ADONET_namespace.ADONET_methods.DisplaySchemaTables() in C:\Documents and Settings\Admin\My Documents\Visual Studio 2008\Projects\AddFileToSQL2\AddFileToSQL\Admins\ADONET methods.cs:line 65 
    InnerException: 

另外,我增加了一個LoginView網絡控制,以確保我的網站。登錄名是「tester」。

+0

爲什麼你認爲這是連接字符串的問題?你有沒有檢查sproc?當你從sql管理工作室直接調用它或者在單步執行代碼時它是否返回數據? – 2010-04-24 17:15:18

+1

你有什麼錯誤嗎?而不是「Persist Security Info = true」,請在Connectionstring2「Integrated Security = True」中嘗試此操作 – Raja 2010-04-24 17:21:43

+0

是的,在SSMS中,sproc正確返回數據。不過,我在後面的C#代碼的這一部分設置了一個斷點,並且正在更新上面的這個異常。 – salvationishere 2010-04-24 17:22:07

回答

1

您正在使用的連接字符串是:

Data Source=SIDEKICK;Initial Catalog=AdventureWorks;Persist Security Info=true; 

這是不對的。您沒有Integrated Security=True,這意味着它不會使用Windows身份驗證。而且你還沒有定義一個User Name/Password,所以它不會使用任何SQL Server登錄。

因此,您的連接字符串嘗試登錄時沒有任何憑據,這就是爲什麼您會收到該錯誤消息。

要修復它,您需要將Integrated Security=True放回(使用當前Windows用戶標識),或者您需要輸入特定的用戶名和密碼。


此外,閱讀您的意見,請注意一個未enecrypted連接字符串和發送過明文密碼的區別:

  • 加密連接字符串當你是有用將憑證信息(如密碼)存儲在您的web.config文件中。如果有人設法得到他們的手web.config,他們看不到密碼。

  • 但是,即使您對連接字符串進行加密,如果連接字符串中有用戶名和密碼,那麼該信息將以明文發送到Web服務器和SQL Server之間。但是,使用Integrated Security時,而不是將發送任何憑證,而不管您是否對連接字符串或web.config進行加密。這就是使用它的原因;集成安全意味着無論哪個Windows帳戶已經登錄,都將用於對SQL Server進行身份驗證。

+0

非常感謝你,亞倫!這正是我需要的! – salvationishere 2010-04-24 17:50:55