Форма входа в C # не может быть загружена.Пропущенные символы загрузки - PullRequest
0 голосов
/ 02 октября 2018

Я создаю приложение Windows Form в c #.Приложение прекрасно работает.Я добавил форму входа в систему, но когда я нажимаю кнопку входа, она останавливается внутри приемника нажатия кнопки.Вот мой код:

 private void add_Click(object sender, EventArgs e)
    {
        SqlConnection sqlCon = new SqlConnection(Program.cs);
        sqlCon.Open();
        DataTable dtbl = new DataTable();
        SqlDataAdapter da = new SqlDataAdapter("dbo.login", sqlCon);
        da.SelectCommand.CommandType = CommandType.StoredProcedure;
        da.SelectCommand.Parameters.AddWithValue("@user", user.Text);
        da.SelectCommand.Parameters.AddWithValue("@pass", pass.Text);
        da.Fill(dtbl);
        if (dtbl.Rows[0][0].ToString() == "1")
        {
            DataTable dtbl2 = new DataTable();
            SqlDataAdapter da2 = new SqlDataAdapter("dbo.loginType", sqlCon);
            da2.SelectCommand.CommandType = CommandType.StoredProcedure;
            da2.SelectCommand.Parameters.AddWithValue("@user", user.Text.Trim());
            da2.Fill(dtbl2);

            t = dtbl2.Rows[0][0].ToString();
            System.Diagnostics.Debug.WriteLine("t is : "+t);
            if (t== "A")
            {
                System.Diagnostics.Debug.WriteLine("innnnnnnn");
                this.Hide();
                AdminMainForm form = new AdminMainForm();
                form.Show();
            }

Это одно из сообщений, которые я получаю:

Пропущенные символы загрузки.Модуль оптимизирован, и включена опция отладчика «Просто мой код».

Останавливается при условии if -> if (t == "A")..., и каждый щелчок просто печатает, чтобы утешить мою строку

  • t is : A

Я проверяю регистр, и t равно «A».Также проверил мои хранимые процедуры, запросы и все хорошо.Спасибо за любую помощь.Майкл.

Ответы [ 2 ]

0 голосов
/ 03 октября 2018

проблема решена.я использовал t.toCharArray () и затем печатал на консоль, это был один символ "A" и 20 пробелов.тип данных в db был char (1).поэтому я использовал char x = t.CharAt (0).

0 голосов
/ 02 октября 2018

При сравнении строк используйте if(oneString.Equals(otherString)).

Полный код:

using(SqlConnection sqlCon = new SqlConnection(Program.cs))
{
    sqlCon.Open();
    using(SqlDataAdapter da = new SqlDataAdapter("dbo.login", sqlCon))
    { 
        DataTable dtbl = new DataTable();
        da.SelectCommand.CommandType = CommandType.StoredProcedure;
        da.SelectCommand.Parameters.AddWithValue("@user", user.Text);
        da.SelectCommand.Parameters.AddWithValue("@pass", pass.Text);
        da.Fill(dtbl);
        if (dtbl.Rows[0][0].ToString() == "1")
        {
            //here rewrite code with using statement
            DataTable dtbl2 = new DataTable();
            SqlDataAdapter da2 = new SqlDataAdapter("dbo.loginType", sqlCon);
            da2.SelectCommand.CommandType = CommandType.StoredProcedure;
            da2.SelectCommand.Parameters.AddWithValue("@user", user.Text.Trim());
            da2.Fill(dtbl2);

            t = dtbl2.Rows[0][0].ToString();
            System.Diagnostics.Debug.WriteLine("t is : "+t);
            if (t.Equals("A"))
            {
                System.Diagnostics.Debug.WriteLine("innnnnnnn");
                this.Hide();
                AdminMainForm form = new AdminMainForm();
                form.Show();
            }
        }
    }
}

Не по теме: Также при подключении к базе данных сделайте это так:

using(SqlConnection con ....)
{
    con.Open();
    using(SqlCommand cmd....)
    {
        ...
    }
}

Почему вам нужно это использовать, потому что SqlConnection, SqlCommand .... - это IDisposable, а внутри оператора using вы потом распоряжаетесь им и таким образом освобождаете память, поэтому нет необходимости делать con.Dispose(); cmd.Dispose()

...