我連接到asp.net mvc 3項目中的數據庫。此外,我在我的解決方案中有一個Windows服務項目,在某些事件中將數據寫入此數據庫。如何打開已經在c#中使用的SQL Server數據庫的連接?
的困難在於,當從Windows服務項目中的代碼需要連接到數據庫,我得到SqlException
:
無法打開數據庫「網上商店」的登錄請求。登錄失敗。用戶'NT AUTHORITY \ SYSTEM'登錄失敗。
下面是從Windows服務的代碼:
public static string GetConnectionString()
{
return @"Data Source=(LocalDB)\v11.0; DataBase=WebStore;
AttachDbFilename=myDbFullPath;
Integrated Security=True;Connect Timeout=30";
}
而在寫入到數據庫中的事件處理程序:
using (var conn = new SqlConnection(GetConnectionString()))
{
conn.Open();
var productId = Convert.ToInt32(Regex.Match(e.Name, @"\d+").Value);
const string cmd1 = "UPDATE Products SET [email protected] WHERE [email protected]";
using (var command = new SqlCommand(cmd1, conn))
{
command.Parameters.AddWithValue("@productId", productId);
command.Parameters.AddWithValue("@date", DateTime.Now);
command.ExecuteNonQuery();
}
}
的例外conn.Open();
線發生。如果我評論這條線將出現新的異常,在command.ExecuteNonQuery();
:
出現InvalidOperationException:開業,是需要的ExecuteNonQuery可用連接。連接已關閉。
問題:如何開到已經連接在另一個項目中的SQL Server數據庫的連接?
編輯1:我用下面的代碼在我的數據庫中創建新的登錄和新用戶:
CREATE LOGIN user1
WITH PASSWORD = 'password1';
GO
CREATE USER user1 FOR LOGIN user1;
GO
比我想附上我在服務器資源管理器DB:我選擇「使用SQL服務器自動驗證「並輸入用戶名:user1,密碼:password1。
我也得到:
附加到以下信息數據庫失敗的嘗試:
登錄失敗,用戶USER1「。
編輯2:我設置該屬性:
processInstaller.Username = "user1";
processInstaller.Password = "password1";
,比運行在cmd中:
installutil /name=user1 /password=password1 MyService.exe
,我得到System.ComponentModel.Win32.Exception:
the comparison between user names and security identifiers haven't been executed.
我該怎麼做?
編輯3:我在服務中設置了我的用戶名和密碼。msc和processInstaller「帳戶」屬性我留下了「本地系統」。它運行,但是當我改變形象(和事件處理程序試圖訪問我的數據庫)我得到:
Cannot attach file 'C:\Users\Aleksey\repos\working-copy\WebStore\WebStore\App_Data\WebStore.mdf' as database 'WebStore' because this file is already in use for database 'C:\USERS\ALEKSEY\REPOS\WORKING-COPY\WEBSTORE\WEBSTORE\APP_DATA\WEBSTORE.MDF',
在連接字符串我加我已經在數據庫中創建的用戶憑據:
User Id=user1;PASSWORD=password1;
此外,當我試圖增加在服務器資源管理器連接,並使用Sql Server Authentication
和我進入user1
和password1
我得到編輯1消息。
我應該在服務器資源管理器*Windows Authentication*
和Windows服務中使用的連接字符串中:User Id=user1;PASSWORD=password1;
?
當您在自己的憑證/身份下調試代碼時,登錄異常仍然發生嗎?另外,我很少在字符串上使用@指令,是否會改變'\'的行爲,使'\ v'正確或者它應該是'\\ v'? (再次,我很少使用@並且不知道。) – 2013-02-26 16:15:12
在數據庫中創建新登錄並在連接字符串中傳遞用戶名和密碼。 – 2013-02-26 16:16:07
您是否嘗試過使用網絡服務帳戶打開它?該帳戶應該繞過傳統登錄。因爲它將像網絡上的計算機一樣工作,所以它不應該有與SQL連接的問題。 http://msdn.microsoft。com/en-us/library/windows/desktop/ms684272%28v = vs.85%29.aspx – Greg 2013-02-26 16:16:35