0

好的,所以我有一个字符串问题。我不确定它是不是很简单,我只是盯着它看了很长时间而一无所获,或者这是我无法避免的事情?

所以我正在尝试使用 C# 登录到 SQL 服务器。一旦登录框出现,我将用户名和密码传递给连接类,登录成功。

    public void login(object sender, EventArgs e)
    {
        sqlconnect sql = new sqlconnect();

        sql.us = textBox1.Text;
        sql.pas = textBox2.Text;
            try
            {
                sql.GetSqlConnection();
                sql.myConnection.Open();
                label3.Text = "Connected";
                this.Hide();
                fronthyb.Show();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

所以下面是我的连接类:

    public class sqlconnect
{
    public SqlConnection myConnection { get; set; }
    public String us;
    public String pas;
    Settings1 set = new Settings1();


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

        return myConnection;
    }


}

当我尝试向数据库添加信息时,现在出现了问题:

     private void button1_Click(object sender, EventArgs e)
    {

            sql.GetSqlConnection();

            SqlCommand cm = new SqlCommand("insert into dbo.Employee(FirstName, LastName, DoB, UserName, Email, Role, JobTitle, MemberOf) values (@FirstName, @LastName, @DoB, @UserName, @Email, @Role, @JobTitle, @MemberOf)", sql.myConnection);
            cm.Parameters.AddWithValue("@FirstName", textBox2.Text);
            cm.Parameters.AddWithValue("@LastName", textBox3.Text);
            cm.Parameters.AddWithValue("@DoB", textBox5.Text);
            sql.myConnection.Open();
            cm.ExecuteNonQuery();
            sql.myConnection.Close();
            this.Close();

我还没有发现任何问题,因为它仍在开发中,但程序崩溃并且基本上说不允许用户。我测试了连接类中的字符串,当我在登录后调用它们时,它什么也不返回。所以它似乎在某个时候被“null”取代了?我不确定。有人看到任何明显的东西吗?对不起,很长的问题。谢谢你。

4

2 回答 2

1

sql您在方法中使用的变量是该login方法的本地变量。

这意味着您在那里创建的对象在方法之外是不可访问的,并且您在方法中使用的任何命名变量都sql与方法中的不同,并且没有在那里设置的用户名和密码。button1_Clicklogin

于 2012-11-03T17:10:22.477 回答
1

似乎是一个范围界定问题。在您的登录处理程序中,您定义一个 SqlConnect 类型的局部变量。如果您有一个名为“sql”的全局变量,因为它在 button1_Click 处理程序中被引用,则它不会设置用户名/密码属性,因为它是一个不同的实例。

于 2012-11-03T17:11:14.867 回答