如何連接並存取 SQL Server 2012 Express LocalDB

本文將介紹如何連接並存取 SQL Server 2012 Express LocalDB。

上一篇筆者介紹如何利用 SqlLocalDB 公用程式來管理 LocalDB 的執行個體,本文將繼續介紹如何在 LocalDB 的執行個體上建立資料庫,以及您的應用程式如何和 LocalDB 做整合。

LocalDB 對於開發人員最大的好處就是方便使用,您不需要管理執行個體的各種設定(例如驗證模式、通訊協定、服務啟動帳戶等),就可以用【(localdb)\執行個體名稱】作為伺服器名稱,利用 SQL Server 2012  Management Studio(含 Express) 或 SQLCMD 公用程式來連接  LocalDB 的執行個體。

若您嘗試使用 SQL Server 2008 R2(含) 以前的管理工具來連接至 LocalDB 執行個體,將看到如下圖的錯誤訊息。

螢幕截圖00010

螢幕截圖00011

因此,您可以到 Microsoft Download Center 下載 2012 版的 SQL Server Management Studio Express。以繁體中文版為例,32 位元檔案名稱為【SQLManagementStudio_x86_CHT.exe】,64 位元的檔案名稱則為【SQLManagementStudio_x64_CHT.exe】。安裝完畢後如果你是使用 SSMS 2012 Express 連接 LocalDB 那就比較沒有路徑的問題,假設您使用的是 SQLCMD 公用程式,記得先切換到【C:\Program Files\Microsoft SQL Server\110\Tools\Binn】路徑,在執行連接 LocalDB 的動作,以免因為預設路徑的關係使用到 SQL Server 2012 之前版本的公用程式而無法連接 LocalDB 的執行個體。

螢幕截圖00012

接下來為了示範方便,筆者使用 SSMS 2012 Express 來示範,介紹在 LocalDB 中建立資料庫的注意事項。

當您的電腦中有安裝 SSMS 2012 以前的版本時,在您第一次開啟 SSMS 2012 會出現如下圖的對話方塊,告訴您 SSMS 2012 要將您在 SSMS 2008 的使用者設定資料匯入到 2012,您可以依照您的需求來選擇是否匯入。

螢幕截圖00013

接著於【連線到伺服器】視窗中輸入【(localdb)\執行個體名稱】,本文以 (localdb)\LocalDB1 為示範。

螢幕截圖00015

點選【物件總管 > 執行個體 > 資料庫 > 新增資料庫】來開啟新增資料庫視窗。

image

LocalDB 在建立資料庫時,預設資料庫檔案路徑是空白的。

螢幕截圖00017

若您輸入完資料庫名稱直接按確定,會看到如下圖的錯誤訊息。

螢幕截圖00018

因此記得在輸入完資料庫名稱後,指定資料庫檔案和交易記錄檔的路徑,才可以順利建立資料庫。

螢幕截圖00019

接著輸入下列的 T-SQL 敘述來建立資料表及測試資料:

   1:  IF OBJECT_ID('tb1') IS NOT NULL 
   2:      DROP TABLE tb1
   3:  GO
   4:   
   5:  CREATE TABLE tb1
   6:  (
   7:      c1 int primary key,
   8:      c2 varchar(10)
   9:  )
  10:  GO
  11:   
  12:  INSERT INTO tb1 VALUES
  13:  (1,'user1'),
  14:  (2,'user2'),
  15:  (3,'user3')
  16:   
  17:  GO
  18:   
  19:  SELECT *
  20:  FROM tb1
  21:   
  22:  GO

執行結果如下:

螢幕截圖00020

最後示範如何利用 Console 應用程式來存取 LocalDB 中的資料,程式碼如下,

   1:  using System;
   2:  using System.Collections.Generic;
   3:  using System.Linq;
   4:  using System.Text;
   5:  using System.Data;
   6:  using System.Data.SqlClient;
   7:   
   8:  namespace Demo
   9:  {
  10:      class Program
  11:      {
  12:          static void Main(string[] args)
  13:          {
  14:              SqlConnectionStringBuilder scsb = new SqlConnectionStringBuilder();
  15:              scsb.DataSource = @"(localdb)\LocalDB1";
  16:              scsb.InitialCatalog = "DB1";
  17:              scsb.IntegratedSecurity = true;
  18:              scsb.AttachDBFilename = @"C:\MSSQL\DB1.mdf";
  19:              using (SqlConnection con = new SqlConnection(scsb.ToString()))
  20:              {
  21:                  using (SqlCommand cmd = new SqlCommand("select count(*) from tb1", con))
  22:                  {
  23:                      if (con.State != ConnectionState.Open) con.Open();
  24:                      Console.WriteLine(cmd.ExecuteScalar().ToString());
  25:                  }
  26:              }
  27:              Console.ReadLine();
  28:          }
  29:      }
  30:  }

其中上述程式碼的第 18 列,使用 AttachDBFilename 屬性來進行資料庫附加的動作,這是選用的選項。

 

【參考資料】