Прежде всего, с 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;
}
}
Таким образом, удаление указанных классов будет выполняться автоматически для вас.