当我可以使用具有相同登录名的 SQL Server Management Studio 进行连接时,为什么我的应用程序无法连接到 SQL Server 数据库?



我意识到这可能是一个很难回答的问题(不可能回答?),因为我无法提供对所涉及的实际服务器的访问权限,但可能我明显缺少了一些东西。

我有一个C#Windows窗体应用程序(.Net 4.5),它需要连接到SQL Server 2012数据库。App.config中的连接字符串如下:

<connectionStrings>
  <add name="MyConnStr"
    connectionString="server=SERVERNAME.ads.lcl;database=MyDatabase;uid=MyUser;password=abcdefg1234567"
    providerName="AspNetSqlProvider" />

我可以使用相同的登录名和密码(使用SQL Server身份验证)通过SQL Server Management Studio连接到数据库并从中读取数据,因此我知道我在连接字符串中正确指定了服务器、数据库、uid和密码。但是当我调试我的程序时,我得到一个SQLException,说Cannot open database "MyDatabase" requested by the login. The login failed. Login failed for user 'MyUser'.

我以前已经做过一千次了,所以我不知所措。

如果有帮助的话,下面是代码的相关部分:

public static string MyConnStr
{
  get { return ConfigurationManager.ConnectionStrings["MyConnStr"].ConnectionString; }
}
public static int[] GetIntArrayFromDB(string query)
{
  DataTable dt = new DataTable();
  using (SqlConnection conn = new SqlConnection(MyConnStr))
  {
    using (SqlCommand cmd = new SqlCommand(query, conn))
    {
      using (SqlDataAdapter da = new SqlDataAdapter(cmd))
      {
        try
        {
          conn.Open();
          da.Fill(dt);
          conn.Close();
        }
        catch (SqlException)
        {
          return null;
        }
        finally
        {
          if (conn != null)
            conn.Dispose();
        }
      }
    }
  }
  int numRows = dt.Rows.Count;
  int[] retInt = new int[numRows];
  for (int i = 0; i < numRows; i++)
  {
    retInt[i] = Convert.ToInt32(dt.Rows[i][0]);
  }
  return retInt;
}

传递给GetIntArrayFromDB()的查询是"SELECT myID FROM myTable"。有什么想法吗?

UPDATE:如果您没有在配置文件中拼错连接字符串名称,那么上面使用命名连接字符串的方法是完全有效的。很抱歉,我正在治疗睡眠不足。感谢所有提出建议的人!

我通过将App.config文件中指定的连接字符串更改为以下内容来修复它(注意,连接字符串本身的格式相同,只是名称不同):

<connectionStrings>
  <remove name="LocalSqlServer" />
  <add name="LocalSqlServer" connectionString="server=MyServer.ads.lcl;database=MyDatabase;uid=MyUser;password=abcdefg1234567"
    providerName="AspNetSqlProvider" />
</connectionStrings>

通过引用我的C#代码中的连接字符串:

get
{
  return ConfigurationManager.ConnectionStrings[0].ConnectionString;
}

我不明白为什么这会有什么不同!这似乎很奇怪。

如果这是SQL Server,那么您的连接字符串应该类似于以下

<add name="ConnectionStringName"
 connectionString="Data Source=DatabaseServer; Initial Catalog=DatabaseName; User ID=UserName; Password=YourPassword;"
 providerName="System.Data.SqlClient" />

不确定您的示例是否只是没有使用"数据源"one_answers"初始目录"条目,但看起来您使用的是"服务器"one_answers"数据库"。

根据connectionstrings.com,SQL 2012:的连接字符串应为以下格式

服务器=myServerAddress;数据库=myDataBase;用户Id=myUsername;密码=myPassword;

我从来没有用过你现在使用的格式,试试看。

最新更新