【发布时间】:2020-12-26 13:55:18
【问题描述】:
我正在尝试为我的登录 wpf 连接到数据库。
SqlConnectionStringBuilder mConnectionBuilder = new SqlConnectionStringBuilder
{
DataSource = @"(LocalDB)\MSSQLLocalDB",
InitialCatalog = "UserData"
};
using (SqlConnection mConnection = new SqlConnection(mConnectionBuilder.ConnectionString))
{
SqlCommand mCommand = new SqlCommand
{
Connection = mConnection,
CommandText = "Select Id, Username, E-Mail, Password from Users"
};
if (mConnection.State == ConnectionState.Closed)
{
mConnection.Open();
}
using (SqlDataReader mReader = mCommand.ExecuteReader())
{
while (mReader.Read())
{
string mUsername = Convert.ToString(mReader.GetValue(1));
string mPassword = Convert.ToString(mReader.GetValue(2));
if (txtLoginUsername.Text == mUsername && txtLoginPassword.Text == mPassword)
{
loginSuccessful = true;
}
else
{
MessageBox.Show("Wrong username or password");
}
}
}
}
我在 Visual Studio 中创建了数据库并将其命名为 UserData。但是在 mConnection.Open() 我得到一个 SqlException “无法打开登录请求的数据库“UserData”。登录失败。用户(myUserName)登录失败“。 我知道在 C# 中使用 SQL 有多种不同的方法,但我希望它能够以这种方式非常努力地工作,因为我花了太多时间来寻找解决这个问题的方法。我希望我能在这里得到一些有用的信息:)
【问题讨论】:
-
mConnectionBuilder.ConnectionString的值是多少? -
用户密码不应以纯文本形式存储。解决连接问题后,请确保密码已加密。
-
SQL 数据库是一个 mdf 文件。您需要将 mdf 文件的位置添加到作为数据库(扩展 mdf 是可选的)属性的连接字符串中。
-
@user9938 这是不正确的。密码永远不应该被加密,它们需要被散列。如果您的意思是后者,请不要混淆术语,这些操作是不同的(加密是双向的,散列是单向的)