首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> ASP.NET 基礎 >> ASP.NET 基礎

ASP.NET LINQ to SQL 連線字串設定陷阱:專案移機後連不上資料庫的真相

     編輯:ASP.NET 基礎

問題情境

三層架構專案,LINQ to SQL 類別 (.dbml) 放在 DAL 專案。原開發機一切正常,部署至新伺服器後,無論如何修改 web.config 或 DAL 專案 app.config,連線字串都不生效,拋出 Timeout expired 或 Cannot open database。

根本原因

LINQ to SQL 設計器產生的 DataContext 建構函式預設讀取 **專案屬性 (Properties) → Settings.settings** 中的連線字串,**而非** web.config / app.config 的 <connectionStrings> 區段。

驗證方式

  1. 開啟 DAL 專案 → Properties → Settings.settings。
  2. 查看 ConnectionString 設定,名稱通常為 MyProject.Properties.Settings.ConnStr。
  3. 此設定編譯後內嵌於 DLL,不會隨部署自動更新。

解決方案

方法一:修改 Settings.settings (最直接)

在 Visual Studio 中直接修改 Settings.settings 的 Value 為正確連線字串,重新編譯部署。

方法二:程式碼覆寫連線字串 (建議,支援多環境)

在 DAL 專案建立 DataContext 的部分類別,覆寫建構函式:

// DAL/MyDataContext.partial.cs
public partial class MyDataContext
{
    public MyDataContext() : 
        base(GetConnectionString(), mappingSource)
    {
        OnCreated();
    }

    private static string GetConnectionString()
    {
        // 優先從 web.config/app.config 讀取
        return ConfigurationManager.ConnectionStrings["MyConnStr"].ConnectionString;
    }
}

呼叫端無需修改:using (var db = new MyDataContext()) { ... } 即自動使用正確連線字串。

方法三:建構函式傳入連線字串 (最彈性)

public partial class MyDataContext
{
    public MyDataContext(string connectionString) : base(connectionString) { }
}

// 使用時
string connStr = ConfigurationManager.ConnectionStrings["MyConnStr"].ConnectionString;
using (var db = new MyDataContext(connStr)) { ... }

web.config 正確設定範例

<connectionStrings>
    <add name="MyConnStr" 
         connectionString="Data Source=192.168.1.100;Initial Catalog=MyDB;User ID=sa;Password=P@ssw0rd;Connect Timeout=30;" 
         providerName="System.Data.SqlClient" />
</connectionStrings>

常見誤區對照

誤區事實
修改 web.config 就能改變 LINQ 連線字串預設讀取 Settings.settings,需覆寫建構函式
DAL 專案 app.config 會被讀取類庫專案 app.config **不會** 自動生效,需手動讀取
連線字串加密後 LINQ 無法使用程式碼讀取時解密即可,或用 ProtectedConfigurationProvider

最佳實務總結

  1. 永遠在 web.config 管理連線字串,勿依賴 Settings.settings。
  2. DataContext 使用部分類別覆寫建構函式,集中管理連線字串來源。
  3. 連線字串名稱統一規範 (如 MainDB、LogDB),避免硬編碼。
  4. 部署腳本自動化:透過 CI/CD 替換 web.config 連線字串 (如 Web.config Transformation、Azure DevOps Variable Substitution)。
  5. 新專案改用 Entity Framework Core:DbContext 透過 DI 注入 IConfiguration,架構更清晰。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved