Tag Archives: Connection String

The target principal name is incorrect. Cannot generate SSPI context

由於最近公司有Product go Live, 所以有很多時候有些urgent 的問題要解決

又不幸的。。。我的電腦剛剛安裝好。。還安裝了Visual Studio 2017.
當我嘗試執行公司的Project時。。出現了以下的錯誤信息。。
The target principal name is incorrect. Cannot generate SSPI context
The target principal name is incorrect. Cannot generate SSPI context

起初還以為是Visual StudioSQL Server版本問題。。
當我仔細看了這個Error message和 connection string 之後。。
便發現問題是來自 Connection string… 因為有了兩隻不同的Login方法
而我們的電腦在Server上沒有Login的Permission

原本的connection string

<add name="ShareChiWaiContext" providerName="System.Data.SqlClient" connectionString="Data Source=sharechiwai.com;Initial Catalog=Blog;User ID=testUser;Password=TestPassword;Integrated Security=True;MultipleActiveResultSets=True" />

只要移除integrated = true 便可以了
解決了的 Connection String
E.g

<add name="ShareChiWaiContext" providerName="System.Data.SqlClient" connectionString="Data Source=sharechiwai.com;Initial Catalog=Blog;User ID=testUser;Password=TestPassword;MultipleActiveResultSets=True" />

Hope you find it useful

Get SQL Server information from connection string via Web.Config / App.Config

公司的新Project 終於要Deploy到Server上給同事測試了…
由於還沒有想到怎樣可以很方便的Dynamic地把SSRS 的Database Connection
Live 轉為 Dev
所以我們便Replicate 了要用的Report 一個連接到Live的Server上的數據..
另一個連接到Dev 上..

LiveDev的數據是以Connection String來 選擇的
由於不知道怎樣可以Pass Connection string 到SSRS 的關係..
所以便要想想辦法..看看如何 找出 Web.Config / App.Config上的 Connection string 屬性
Server名, 便用者名稱.. Database名等等 來決正

我的例子是Database和 Username LiveDev Server都是一樣的..
不同之處只是在Server名上

如何可以在Connection String 上找出 Connection String 上的 Server 名呢..

解決方法
我們可以使用SqlConnectionStringBuilder 來分析我們的Connection String 以便找出 我們的Connection String 資訊
E.G.

 <add name="ApplicationServices" connectionString="Data Source=ShareChiWaiServer;Initial Catalog=ShareChiWaiSample;User Id=iBillUser;Password=iBill2011;" providerName="System.Data.SqlClient" />
//建立 SqlConnectionStringBuilder Object
 SqlConnectionStringBuilder sqlConStrBuilder =
              new SqlConnectionStringBuilder(ConfigurationManager.ConnectionStrings["ApplicationServices"].ConnectionString);

  //取得 Database 名
  Console.WriteLine("Database Name: " + sqlConStrBuilder.InitialCatalog);
  //取得 Server 名
  Console.WriteLine("Server Name: " + sqlConStrBuilder.DataSource);
  //取得 Username
  Console.WriteLine("UserID: " + sqlConStrBuilder.UserID);

Hope you find it useful