簡體   English   中英

無法連接到SQL數據庫-用戶名和密碼丟失

[英]Cannot connect to SQL database - loss of username and password

遇到一些代碼困難。 我認為變量卡在了我正在調用的方法中,當我再次運行該方法時,變量不再存在。

下面是我的主要例子:

        public partial class Login : Form
{

    public Login()
    {
        InitializeComponent();
    }
    sqlconnect sql = new sqlconnect();
    public string pass;
    public string user;


    public void button1_Click(object sender, EventArgs e)
    {
        //Username and password textboxes send to public strings
        user = textBox1.Text;
        pass = textBox2.Text;

            try
            {
                //try connecting to SQL database using SQL class
                sql.GetSqlConnection();
                sql.myConnection.Open();
                this.Hide();

            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

這是SQL連接類:

    namespace NHS_Workshop_System
         {

public class sqlconnect
{
    public SqlConnection myConnection { get; set; }
    Settings1 set = new Settings1();
    Login var = new Login();

    public SqlConnection GetSqlConnection()
    {
        if (myConnection == null)
            myConnection = new SqlConnection("user id="+(var.user)+"; password="+(var.pass)+";server="+(set.SelectServer)+";Trusted_Connection="+(set.SelectContype)+";database="+(set.SelectDataBase)+"; connection timeout="+(set.Condrop)+"");

        return myConnection;
    }


}

}

因此,當我嘗試登錄時,它可能會在第一次工作,但如果其他表單嘗試運行該方法,則用戶名和密碼會丟失。 我不確定如何使變量成為全局變量,以便每次運行該方法時都不會失敗地調用這些詳細信息。 因此,它第二次在另一種形式上使用sqlconnection時,ex消息指出用戶名和密碼不存在。 這是否是一個范圍界定的問題,如果有人可以闡明我該如何處理,也許這是一種獲取SQL Server訪問權限的新方法? 謝謝你扯我的頭發

以下是您現在的問題答案。 但是我強烈建議您考慮一下自己在做什么,因為您的類邏輯似乎不太好。 我看到您嘗試實現Singleton的嘗試很好,但是如果願意,您仍然可以創建更多sqlconnect實例。


在您的Login類中,傳遞此Login實例,以便sqlconnector知道用戶並傳遞此處聲明的內容。

public partial class Login : Form
{

// Old style - sqlconnect sql = new sqlconnect();
sqlconnect sql;
public string pass; // These arent declared and wont be of use for your sql connect class
public string user;

public Login( String pass, String user )
{
    this.pass = pass;
    this.user = user;
    // Now that we have a login with declared variables, pass it to the sqlconnect object
    this.sql = new sqlconnect(this);
    InitializeComponent();
}

現在在您的sqlconnect類中,在Login變量為空之前。 現在,您在構造函數中收到了一個實例,該實例已設置了變量,

public class sqlconnect
{
    public SqlConnection myConnection { get; set; }
    Settings1 set = new Settings1();
    // Here you maked a new one, use the existing instead from which this class is called.
    // changed variable named from var to login..
    Login login; 


    // *NEW* Constructor where you pass your login object
    public sqlconnect(Login login)
    {
        this.login = login;
    }

    public SqlConnection GetSqlConnection()
    {
        if (myConnection == null)
            myConnection = new SqlConnection("user id="+(login.user)+"; password="+(login.pass)+";server="+(set.SelectServer)+";Trusted_Connection="+(set.SelectContype)+";database="+(set.SelectDataBase)+"; connection timeout="+(set.Condrop)+"");

        return myConnection;
    }


}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM