2016-12-06 79 views
0

你能幫助我嗎?我需要連接到SqlServer 2016上的本地數據庫,但是當我嘗試打開連接時,出現此錯誤。我不嘗試其他方式登錄,因爲我不記得密碼(我總是用Windows驗證。)本地SqlServer 2016 - 登錄失敗

其他信息:無法打開數據庫「MY_PROJECT」登錄所請求的 。登錄失敗。

用戶'DESKTOP-C448DNE \ Denis'登錄失敗。

這裏是我的C#代碼,我用:

public class DbHelper 
{ 
    public SqlConnection Connection { get; private set; } 
    public string Language { get; set; } 

    public DbHelper() 
    { 
     Connection = new SqlConnection(); 
     Language = "en"; 
    } 

    public bool Connect(string conString) 
    { 
     if (Connection.State != ConnectionState.Open) 
     { 
      Connection.ConnectionString = conString; 
      Connection.Open(); 
     } 
     return true; 
    } 

    public bool Connect() 
    { 
     string connString = "Data Source=(localdb)\\MSSQLLocalDB; Initial Catalog = My_Project; Integrated Security=true;"; 

     return Connect(connString); 
    } 

    public void Close() 
    { 
     Connection.Close(); 
    } 

    public int ExecuteNonQuery(SqlCommand sqlCommand) 
    { 
     int rowNumber = 0; 
     try 
     { 
      rowNumber = sqlCommand.ExecuteNonQuery(); 
     } 
     catch (Exception e) 
     { 
      throw e; 
     } 
     return rowNumber; 
    } 
} 

在這裏,我使用這個類:

... 
    private DbHelper _db; 

    public SqlEmployeeMapper() 
    { 
     _db = new DbHelper(); 
    } 

    public int Create(Employee entity) 
    { 
     var conn = _db.Connect(); 

     string queryString = "insert into \"employees\" (first_name, last_name, email, phone_number, password, city, address, holiday, role_id, departmant_id)" + 
      "values(@first_name, @last_name, @email, @phone_number, @password, @city, @address, @holiday, @role_id, @departmant_id);"; 


     SqlCommand command = new SqlCommand(queryString); 
     PrepareCommand(command, entity); 
     var id = _db.ExecuteNonQuery(command); 

     _db.Close(); 

     return id; 
    } 
... 

編輯: 我嘗試打開服務器資源管理器在VS2015,然後單擊「添加連接「...我輸入」(localdb)\ MSSQLLocalDB「作爲服務器名稱,當我打開數據庫的下拉列表時,看不到我的數據庫

+0

您是否安裝了SSMS?如果是的話,你可以通過它連接? –

+0

聽起來像您需要爲您的WIndows帳戶創建登錄 – stuartd

+0

@ destination-data是SSMS正常工作 –

回答

0

您是否使用Visual Studio?如果是這樣,您可以在服務器資源管理器中創建一個成功驗證的連接嗎?

+0

這不是問題的答案,應該是一個評論 – stuartd

+0

檢查我的文章更新請求 –

+0

您的連接字符串使用「(localdb)」,它使用localdb安裝。如果您安裝了包含目標數據庫的SQL Server 2016,則不會使用(localdb)查找它。請參閱https://blogs.msdn.microsoft.com/sqlexpress/2011/10/28/localdb-where-is-my-database/。假設您的SQL 2016實例被命名爲MSSQLLocalDB,請嘗試直接連接到它,而不使用(localdb)。 – user3802434

0

SQL本地Db的實例具有名稱和名爲pipe的實例。當使用低於4.0.2的.Net時,您必須通過命名管道進行連接。從docs on MSDN

如果您的應用程序使用4.0.2之前版本的.NET,則必須直接連接到LocalDB的命名管道。實例管道名稱值是LocalDB實例正在偵聽的命名管道。 LOCALDB#之後的Instance管道名稱部分將在每次啓動LocalDB實例時更改。要通過使用SQL Server Management Studio連接到LocalDB的實例,請在「連接到數據庫引擎」對話框的「服務器名稱」框中鍵入實例管道名稱。從您的自定義程序中,您可以使用類似於SqlConnection的連接字符串建立與LocalDB實例的連接。conn = new SqlConnection(@「Server = np:\。\ pipe \ LOCALDB#F365A78E \ tsql \ query」);

與名稱不同,每當實例重新啓動時,命名管道都會更改。找到當前命名管道的一種方法是通過命令行。

SQLLocalDb i MSSQLLocalDb 

如果實例已停止,您需要啓動它。啓動該實例將生成命名管道。五分鐘或更長時間沒有連接會停止實例。

SQLLocalDb s MSSQLLcoalDb 

更多在命令行上採取在docs偷看,再次從MSDN服用。

我不確定SS 2016 SP1中的重大更改是否會消除通過命名管道連接的需求。

+0

我使用.net 4.5:/ –