SQL исключение не было обработано в C # - PullRequest
0 голосов
/ 11 сентября 2010

Когда я хочу отладить этот код, он выдает ошибку на objConnection.Open ():

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

    SqlConnection objConnection = new SqlConnection(
"server=localhost;database=pubs;" +
"user id=sa;password=");
    SqlDataAdapter objDataAdapter = new SqlDataAdapter();
    DataSet objDataSet = new DataSet();
    public Form1()
    {
        InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        // Set the SelectCommand properties... 
        objDataAdapter.SelectCommand = new SqlCommand();
        objDataAdapter.SelectCommand.Connection =
              objConnection;
        objDataAdapter.SelectCommand.CommandText =
         "SELECT au_lname, au_fname, title, price " +
         "FROM authors " +
        "JOIN titleauthor ON authors.au_id = " +
        "titleauthor.au_id " +
         "JOIN titles ON titleauthor.title_id = " +
        "titles.title_id " +
         "ORDER BY au_lname, au_fname";
        objDataAdapter.SelectCommand.CommandType =
             CommandType.Text;
        // Open the database connection... 
        **objConnection.Open();**
        // Fill the DataSet object with data... 
        objDataAdapter.Fill(objDataSet, "authors");
        // Close the database connection... 
        objConnection.Close();
        // Set the DataGridView properties  
        // to bind it to our data... 
        grdAuthorTitles.AutoGenerateColumns = true;
        grdAuthorTitles.DataSource = objDataSet;
        grdAuthorTitles.DataMember = "authors";
        // Clean up 
        objDataAdapter = null;
        objConnection = null; 
    }

Ответы [ 2 ]

3 голосов
/ 11 сентября 2010

Эта ошибка обычно возникает, если имя вашего сервера неверно или сервер sql не включен.

localhost и (local) обрабатываются по-разному для сервера sql . Вы можете попробовать (локально).

Вот список строк подключения , чтобы помочь вам.

Если вы используете sql express, вы можете изменить его с localhost на. \ Sqlexpress.

Чтобы убедиться, что ваш SQL Server включен, убедитесь, что службы для него включены. Вы можете сделать это в службах, а также в Configuration Manager.

1 голос
/ 11 сентября 2010

Прежде всего, с SqlDataAdapter вам не нужно специально открывать и закрывать SqlConnection самостоятельно - адаптер сделает это за вас.

Во-вторых, я настоятельно рекомендую поместить весь ваш код ADO.NET в блоки using(.....) { .... } в качестве лучшей практики.

Кроме того, на локальном ПК обычно не требуется указывать конкретного пользователя для вашей базы данных, но вы можете напрямую использовать встроенную проверку подлинности Windows (integrated security=SSPI) в строке подключения SQL.

И последнее: если вам не нужно использовать несколько таблиц в DataSet, вместо этого проще и лучше использовать DataTable - меньше накладных расходов, меньше потерь производительности. Не нужно указывать имена таблиц в качестве элементов данных и так далее. Просто проще.

Попробуйте этот код:

public Form1()
{
    InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
{
    using(SqlConnection objConnection = new SqlConnection("server=(local);database=pubs;integrated security=SSPI;"))
    {
        SqlDataAdapter objDataAdapter = new SqlDataAdapter();

        // Set the SelectCommand properties... 
        objDataAdapter.SelectCommand = new SqlCommand();
        objDataAdapter.SelectCommand.Connection = objConnection;
        objDataAdapter.SelectCommand.CommandText =
            "SELECT au_lname, au_fname, title, price FROM authors " +
            "JOIN titleauthor ON authors.au_id = titleauthor.au_id " +
            "JOIN titles ON titleauthor.title_id = titles.title_id " +
            "ORDER BY au_lname, au_fname";

        DataTable tblData = new DataTable();

        // Fill the DataSet object with data... 
        objDataAdapter.Fill(tblData);

        // Set the DataGridView properties  
        // to bind it to our data... 
        grdAuthorTitles.AutoGenerateColumns = true;
        grdAuthorTitles.DataSource = tblData;
   }
}

Таким образом, удаление указанных классов будет выполняться автоматически для вас.

...