建立與 SQL Server 的連接時出錯
如果我在 web.config 中有這樣的連接字元串(添加換行符以提高可讀性):
<add name="conn" connectionString="Data Source=(localdb)\v11.0; Initial Catalog=MyDB; Integrated Security=True; MultipleActiveResultSets=True; AttachDbFilename=D:\Products.mdf" providerName="System.Data.SqlClient"/>連接有效,我可以連接到數據庫資源管理器中的數據庫。
當我在程式碼中指定連接字元串或使用 ConfigurationManager 獲取它時,它不起作用:
SqlCommand command = new SqlCommand(); command.CommandText = "select ..."; command.CommandType = CommandType.Text; SqlConnection cn = new SqlConnection("Data Source=(localdb)\\v11.0;"+ "Initial Catalog=MyDB; Integrated Security=True; "+ "MultipleActiveResultSets=True; AttachDbFilename=D:\\Products.mdf"); command.Connection = cn; cn.Open(); DataTable dataTable = new DataTable(); SqlDataReader reader; reader = command.ExecuteReader(); dataTable.Load(reader); cn.Close();從 web.config 獲取連接字元串給出了相同的錯誤:
SqlConnection cn = new SqlConnection(ConfigurationManager.ConnectionStrings ["conn"].ConnectionString;我得到的錯誤是“ System.ComponentModel.Win32Exception:找不到網路路徑”
在跟踪是說:
建立與 SQL Server 的連接時發生與網路相關或特定於實例的錯誤。伺服器未找到或無法訪問。驗證實例名稱是否正確以及 SQL Server 是否配置為允許遠端連接。(提供者:命名管道提供者,錯誤:40 - 無法打開與 SQL Server 的連接)]
我需要一些幫助來解決這個問題,幾個小時以來一直在嘗試解決這個問題,任何線上建議都是我應該檢查網路設置(不適用,因為它連接到 sql server express 的本地實例)。伺服器名稱(相同的字元串在 VS Express 中有效,但在執行程式碼中無效)。
會不會是身份驗證問題?如果是這樣,那麼為什麼會出現資訊錯誤?
感謝您閱讀我的文章,希望您能幫助我解決這個問題。
更新:
我嘗試了以下事情:
賦予組每個人對 mdf 和 ldf 文件的完全權限
在 web 下的項目屬性中,我嘗試在 VS 開發伺服器和本地 IIS web 伺服器(是 IIS Express)下執行項目
不走運,將程式碼複製到使用“ASP.NET 空 Web 應用程序”創建的項目時,仍然無法完美連接
該問題與未在 .net 4.0 版中執行的應用程序有關
根據以下頁面: http: //www.connectionstrings.com/sql-server-2012#sqlconnection
您需要 .net 4.0 及更高版本才能使用命名管道:
4.0.2 之前的 .NET 框架版本不支持 Server=(localdb) 語法。但是,命名管道連接將用於將 4.0.2 之前的應用程序連接到 LocalDB 實例。
SqlLocalDB.exe create MyInstance SqlLocalDB.exe start MyInstance SqlLocalDB.exe info MyInstance該資訊提供了命名管道,然後可以在連接字元串中使用它:
<add name="conn" providerName="System.Data.SqlClient" connectionString="Server=np:\\.\pipe\LOCALDB#B1704E69\tsql\query"/>
您已經正確地轉義了 db 文件名,但沒有轉義數據源,因此它嘗試連接到名為“(localdb)11.0”的數據源,該數據源(很可能)不存在。
嘗試像這樣正確地轉義它:
SqlConnection cn = new SqlConnection("Data Source=(localdb)\\v11.0;"+ "Initial Catalog=MyDB; Integrated Security=True; "+ "MultipleActiveResultSets=True; AttachDbFilename=D:\\Products.mdf");