【问题标题】:Unable to connect to database C#无法连接到数据库 C#
【发布时间】:2014-09-22 07:13:36
【问题描述】:

我一直在尝试通过 App.config 中的连接字符串连接到我的 MS Sql 数据库,但由于某种原因无法登录,我似乎无法弄清楚。

这是我的连接方法:

public void Con()
{

        string userName = userNameBox.Text;
        string passWord = passWordBox.Text;

        bool loginFail;

        SqlConnection Conn = new SqlConnection(ConfigurationManager.ConnectionStrings["lagerConn"].ConnectionString);

        //Search Connstring for User ID= & Password= and replace with username and password from Textboxes
        if (_Connstring.Contains("User ID="))
        {
            _Connstring = _Connstring.Replace("User ID=;", "User ID=" + userName + ";");

        }
        if (_Connstring.Contains("Password="))
        {
            _Connstring = _Connstring.Replace("Password=", "Password='" + passWord + "'");
        }

        try
        {
            Conn.Open();
            Conn.Close();
            loginFail = false;
        }catch
        {
            MessageBox.Show("Login Failed");
            loginFail = true;
        }
        if(loginFail == false) //If login is successful it will change to the next form and hide the Connect form
        {
            mainMenu secondForm = new mainMenu();
            secondForm.Show();
            this.Hide();

        }

    }`

这是我的 App.config

        <add name="lagerConn" connectionString="Data Source=LagerServer;Initial Catalog=LagerDB;Persist Security Info=True;User ID=;Password="
        providerName="System.Data.SqlClient" />
</connectionStrings>

I got this exception

【问题讨论】:

  • 您应该始终使用parameterized queries。这种字符串连接对SQL Injection 攻击开放。并且不要将您的密码存储为纯文本。使用散列函数作为 SHA-512。
  • 你能告诉我们你在连接时收到的异常吗
  • 为方便起见,您应该在问题中包含例外作为编辑
  • 请查看http://www.connectionstrings.com/sql-server/

标签: c# sql database connection-string


【解决方案1】:

在连接字符串中放置一个空的用户 ID 和密码字段是没有意义的。只需将它们完全排除在外,并摆脱那个毫无意义的Persist Security Info。使用连接字符串生成器,例如

SqlConnection builder = new SqlConnectionStringBuilder(ConfigurationManager.ConnectionStrings["lagerConn"].ConnectionString);

builder.UserID = userID;
builder.Password = password;

SqlConnection connection = new SqlConnection(builder.ConnectionString);

之后,不要只提供一般性错误消息而忽略系统提供给您的信息。查看异常,它会告诉你出了什么问题。

【讨论】:

  • 这帮了我很大的忙,非常感谢,我还有很长的路要走,呵呵。
【解决方案2】:

试试:

string userName = userNameBox.Text;
string passWord = passWordBox.Text;
string connStr = ConfigurationManager.ConnectionStrings["lagerConn"].ConnectionString;
connStr = connStr.Replace("User ID=;", "User ID=" + userName + ";");
connStr = connStr.Replace("Password=", "Password='" + passWord + "'");
bool loginFail = false;
try{
    using (SqlConnection Conn = new SqlConnection(connStr){
       loginFail true;
    }
}
catch (SqlConnection sqlEx){
   //already false
}

是的,小心 sql 注入攻击!

【讨论】:

    【解决方案3】:

    首先,您不应该在 TextBox 中写入 UserID 和 Password,将它们静态写入连接字符串。异常告诉了您一切-> 用户“”登录失败。您没有在文本框中输入正确的用户名或密码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-03
      • 2017-09-06
      • 2023-04-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多