我意识到这可能是一个很难回答的问题(不可能回答?),因为我无法提供对所涉及的实际服务器的访问权限,但可能我明显缺少了一些东西。
我有一个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;
我从来没有用过你现在使用的格式,试试看。