2014-10-10 180 views
1

下面是我的代码的简要版本,因为它涉及到数据库访问。连接到Microsoft SQL服务器错误

using System; 
using System.Collections.Generic; 
using System.Data.SqlClient; 

namespace DataAccess 
{ 
    public class DbConnection 
{ 
    public string connString = "Data Source=[Insert IP];Initial Catalog=MOSAIQ;Persist Security Info=True;User ID=[Insert User];Password=[Insert Password]"; 

    public void CreateConnection() 
    { 
     using (SqlConnection conn = new SqlConnection(connString)) 
     { 
      try 
      { 
       conn.Open(); 
      } 
      catch (Exception ex) 
      { 
       Console.WriteLine(ex); 
      } 
     } 
    } 
} 

出于安全原因,我已经删除了IP和用户凭证。这就是说,我直接从成功连接到我的数据库的服务器资源管理器的属性复制上述连接字符串。

在加强通过这个代码以下错误是在执行conn.Open() enter image description here

抓住似乎很明显,有验证过程中的问题。提供的凭据是用于SQL身份验证的凭据。

为什么我可以通过服务器浏览器连接,但不是直接通过我的代码? Visual Studio为我做了什么,我无法看到自己做了什么?

端口是开放的,防火墙不是问题。我很难过,作为一名新手,在这个问题上会感谢进一步的指导。

我试图连接到SQL Server 2008 R2,使用Visual Studio的2013年

+0

SQL Server是什么?企业?表现?紧凑? – 2014-10-10 20:14:53

+0

这可能有所帮助:http://ricardodsanchez.com/2012/04/05/how-to-configure-sql-express-to-accept-remote-connections/但首先确保您的SQL服务器托管在IP 1.1下。 1.1 - 似乎不常见。 – 2014-10-10 20:19:37

+0

我同意李嘉图的观点,1.1.1.1对我来说看起来很奇怪。当你通过SQL MGT Studio登录时,你输入1.1.1.1吗?输入你在那里登录的内容。测试ODBC连接怎么样?这是否也工作? (控制面板 - >管理工具 - >数据源(ODBC) - >添加 - >从那里配置)。这与你在连接字符串中的含义是否一致? – alykins 2014-10-10 20:41:26

回答

0

作为测试尝试使用SqlConnectionStringBuilder

System.Data.SqlClient.SqlConnectionStringBuilder builder = new System.Data.SqlClient.SqlConnectionStringBuilder(); 
builder["Data Source"] = "(local)"; 
builder["integrated Security"] = true; 
//Or Supply User and Password 
builder["Connect Timeout"] = 1000; 
builder["Initial Catalog"] = "AdventureWorks;NewValue=Bad"; 
Console.WriteLine(builder.ConnectionString); 

如果你做到这一点,但仍然遇到错误然后继续测试网络。

<add name="RM_V1.0CS1" connectionString="Data Source=SERVER;Initial Catalog=DB;User ID=sa;Password=Password" providerName="System.Data.SqlClient" /> 

编辑设置明确提供:

+0

为了我自己的学习C#的知识,使用SqlConnectionStringBuilder类确保强类型属性的正确放置的优势是?只是试图按照逻辑,也许解决当前连接字符串的方式可能是问题?大声输出我想那么这个班会尝试并减轻潜在的错误是有道理的。 – TargetofGravity 2014-10-11 03:24:52

+0

使用'SqlConnection'时使用的默认提供程序是什么?当我使用服务器浏览器查看我建立的连接的高级属性时,它显示'Provider = SQLNCLI11',我希望检查这个,因为这不是我可以在连接字符串中指定的字段,而使用'SqlConnection' – TargetofGravity 2014-10-11 04:32:33

+0

@ TargetofGravity是的,建设者应该消除任何错误的解析或拼写错误。在阅读您的评论后,我认为问题在于提供者。尝试显式设置提供程序providerName =“System.Data.SqlClient”请参阅上面的编辑 – 2014-10-11 19:58:11

0

对于那些可能会遇到类似的问题。我通过工作将我的解决方案保存在网络驱动器上。因为我从这个网络位置打开并运行我的解决方案,原因是我还没有意识到它使用的是我的Windows凭据,而不是我传递给SQL服务器的SQL凭据。一旦解决方案移动到我的本地工作站,该方法按预期运行。任何关于更具体发生什么的见解都会引起人们的兴趣。