2016-12-06 52 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:/ –