Как я могу подключить SQL к форме Windows?

Я все еще работаю над своей программой обмена сообщениями, она будет более безопасной, но я просто тестирую ее. У меня есть форма входа, которая предназначена для подключения к базе данных SQL, я установил ее сейчас с помощью локального SQL, поскольку я пытался заставить ее работать (она все еще не работает), и мне просто интересно, что Я поступил неправильно.

private void button1_Click(object sender, EventArgs e)
    {
        LoginInfo.un = textBox1.Text;
        LoginInfo.pw = textBox2.Text;

        SqlConnection con = new SqlConnection();
        con.ConnectionString = "Data Source=localhost:3306; User Id=PXgamer;Password=Password1; Initial Catalog=login;";
        try
        {
            con.Open();
        }
        catch (Exception)
        {
            MessageBox.Show("Error with the database connection");
        }
        string qry1 = "Select * from login where Password=@Password and Username=@Username";
        SqlCommand com = new SqlCommand(qry1, con);
        com.Parameters.AddWithValue("@Username", LoginInfo.un);
        com.Parameters.AddWithValue("@Password", LoginInfo.pw);
        SqlDataReader dr = com.ExecuteReader();
        while (dr.Read())
        {
            if (dr.HasRows == true)
            {
                MessageBox.Show("Login Successful", "Login Information");
            }
        }
        if (dr.HasRows == false)
        {
            MessageBox.Show("Access Denied", "Login Information");
        }

        this.Hide();
        var frmMain = new frmMain();
        frmMain.Closed += (s, args) => this.Close();
        frmMain.Show();
    }

Вот мой код, сначала соединение зависает, а потом появляется Ошибка с ошибкой подключения к базе данных. Я попытался найти это, но там написано, что соединение не открылось. Очевидно, я предполагаю, что что-то не так со строкой подключения.

При отладке выделяется эта часть:

SqlDataReader dr = com.ExecuteReader();

Это показанная ошибка:

Необработанное исключение типа System.InvalidOperationException произошло в System.Data.dll

Дополнительная информация: ExecuteReader требует открытого и доступного соединения. Текущее состояние соединения закрыто.

Необработанное исключение типа System.Data.SqlClient.SqlException произошло в System.Data.dll

Ошибка без подвоха:

Дополнительная информация: при установке соединения с SQL Server произошла ошибка, связанная с сетью или конкретным экземпляром. Сервер не найден или не был доступен. Убедитесь, что имя экземпляра правильное и что SQL Server настроен на разрешение удаленных подключений. (поставщик: поставщик именованных каналов, ошибка: 40 - не удалось открыть соединение с SQL Server)


person owenvoke    schedule 13.07.2015    source источник
comment
Вы проглатываете существенную ошибку. Удалите try catch вокруг вашего con.Open(), а затем отправьте обратно свое полное сообщение об ошибке, которое возникает при вызове con.Open().   -  person sstan    schedule 13.07.2015
comment
Я считаю, что в вашей строке подключения есть ошибка. Посетите этот сайт для получения дальнейших инструкций.   -  person Saragis    schedule 13.07.2015
comment
Это всего лишь предположение, но имеет ли ваша база данных другое имя, кроме login? Если это так, то часть строки подключения «Начальный каталог» - это имя базы данных, а не таблица, которую вы хотите запросить.   -  person entropic    schedule 13.07.2015
comment
Я знаю, что вы сказали, что это ваше приложение для тестирования, но, возможно, вы захотите это прочитать. blogs.msmvps.com / jcoehoorn / blog / 2014/05/12 / Кроме того, вам действительно нужно хешировать свои пароли, а не хранить их в виде обычного текста.   -  person Sean Lange    schedule 13.07.2015
comment
@sstan Готово, надеюсь, это поможет. Похоже, он просто не подключается к моему SQL. Но он работает, когда я подключаюсь от чего-либо еще.   -  person owenvoke    schedule 13.07.2015
comment
@PXGamer: Как вы подключаетесь к своей базе данных, когда делаете это через SSMS? Какое имя у сервера? Используете ли вы проверку подлинности Windows или проверку подлинности SQL Server? Какой сетевой протокол вы используете? Вы должны попробовать это так же, как в коде.   -  person sstan    schedule 13.07.2015
comment
@sstan Обычно я подключаюсь через PHPMyAdmin или подключаюсь через локальный веб-сайт. Что отлично работает. У меня просто есть имя пользователя и пароль, поэтому я не уверен в Windows Auth или SQL Server Auth.   -  person owenvoke    schedule 13.07.2015
comment
@PXGamer: Подожди секунду. К какой базе данных вы подключаетесь? Это действительно база данных SQL Server? Или это база данных MySQL?   -  person sstan    schedule 13.07.2015
comment
@sstan MySQL ... А есть разница? О, Боже.   -  person owenvoke    schedule 13.07.2015
comment
@PXGamer: Вы держите пари, что есть. И вы отметили свой вопрос sql-server. Итак, мы все были введены в заблуждение.   -  person sstan    schedule 13.07.2015
comment
@sstan Черт, я был идиотом.   -  person owenvoke    schedule 13.07.2015


Ответы (3)


Вы пытаетесь подключиться к базе данных MySQL, используя классы ADO.NET, специфичные для SQL Server. Это не сработает.

Вы можете видеть, что ваш текущий код пытается подключиться к экземпляру SQL Server, из полученного сообщения об ошибке:

Дополнительная информация. Произошла ошибка, связанная с сетью или конкретным экземпляром, при установке соединения с SQL Server. Сервер не найден или не был доступен. Убедитесь, что имя экземпляра правильное и что SQL Server настроен на разрешение удаленных подключений. (поставщик: поставщик именованных каналов, ошибка: 40 - не удалось открыть соединение с SQL Server)

Вам необходимо загрузить драйверы для MySQL, чтобы подключиться к MySQL, и использовать их вместо этого.

драйвер ADO.NET для MySQL

person sstan    schedule 13.07.2015

Потеря порта (:3306) из строки подключения должна работать нормально. Если SQL Server не использует порт по умолчанию, укажите, как показано ниже (используя запятую, а не двоеточие)

Data Source=server.ip.address,1433; Initial Catalog=myDataBase; 
User ID=myUsername; Password=myPassword;

Проверьте эту ссылку на наличие других вариантов строк подключения к SQL Server.

person S.Krishna    schedule 13.07.2015

Каждая строка кода, для работы которой нужен объект con, должна оставаться внутри блока try вашего метода.

Кроме того, если вы не можете открыть соединение, есть две возможности:

  1. ваша строка подключения неверна;
  2. ваш локальный SQL Server не принимает соединение от вашего приложения (неправильно сконфигурировано, не запущено и т. д.);
  3. оба;

Здесь вы можете найти строки подключения для SQL Server: https://www.connectionstrings.com/sql-server-2008/

Наконец ... используйте блок 'finally' в конце для 'con.Close ()'.

person Marco Sanfilippo    schedule 13.07.2015