navi G Ответов: 1

Соединение открывается и закрывается, как правильно его использовать ?


Привет друзья, вот мой код, который я просто хочу знать, где и когда следует использовать соединение Open/Close?
Пожалуйста, для лучшего понимания отредактируйте мой код и опубликуйте свои ответы.

Примечание: Я не получаю ошибку.
Большое вам всем спасибо.

Что я уже пробовал:

общественные частичное категории Класс : система.Веб.Пользовательского интерфейса.Страницы
{
SqlConnection con = новый SqlConnection();
PagedDataSource pds = новый PagedDataSource();
protected void Page_Load(отправитель объекта, EventArgs e)
{
против.ConnectionString = ConfigurationManager.ConnectionStrings ["Конн"].Параметр connectionString;

пробовать
{
if (! IsPostBack)
{
showData();
}

}
поймать (исключение бывший)
{
Ответ.Напиши (напр.Метод toString());
}

}

void showData()
{
против.Открыть();
строка catsearch = Convert.ToString(Session ["category"]);
строка SQL = "выбрать * из Table_One, где категории, как @категория или GenreOne как @genre1 или GenreTwo как @genre2 или GenreThree как @genre3 или аудио, как @аудио или язык, как язык";
SqlCommand cmd = new SqlCommand(sql, con);
// Добавьте параметры, необходимые для SQL-запроса
УМК.Параметры.AddWithValue ("@category", " % " + catsearch + "%");
УМК.Параметры.AddWithValue("@genre1", " % " + catsearch + "%");
УМК.Параметры.AddWithValue("@genre2", " % " + catsearch + "%");
УМК.Параметры.AddWithValue("@genre3", " % " + catsearch + "%");
УМК.Параметры.AddWithValue ("@audio", " % " + catsearch + "%");
УМК.Параметры.AddWithValue ("@language", " % " + catsearch + "%");
SqlDataAdapter da = новый SqlDataAdapter(cmd);
Набор ДТ = новый набор данных();
да.Заполнить(ДТ);

ШПР.Источник данных = ДТ.Таблицы[0].DefaultView;
ПДС.AllowPaging = true;
//СПД.Pagesize Для = Конвертировать.ToInt16(ddlPageSize.SelectedValue);
pds. PageSize = 20;
ПДС.CurrentPageIndex = CurrentPage;
Linknext.Включено = !ШПР.IsLastPage;
Обратная связь.Включено =! pds.IsFirstPage;

DataList2.Источник данных = ШПР;
DataList2.Привязку();
lbl_heading_top.Текст = Преобразовать.ToString (catsearch) + "" + " список фильмов";
допинг();
против.Закрывать();
}
public int CurrentPage
{

получить
{
if (this. ViewState ["CurrentPage"] = = null)
возвращает 0;
еще
возвратный конверт.ToInt16 (this. ViewState ["CurrentPage"].Метод toString());
}

набор
{
this. ViewState ["CurrentPage"] = значение;
}

}
частный пустотный допинг()
{
DataTable dt = новый DataTable();
ДТ.Столбцы.Добавить ("PageIndex");
ДТ.Столбцы.Добавить ("PageText");
for (int i = 0; i < pds. PageCount; i++)
{
Доктор строкаданных = ДТ.Невров();
dr[0] = i;
dr[1] = i + 1;
ДТ.Строк.Добавить(д-р);
}

dlPaging.Источник данных = dt;
dlPaging.Привязку();
}

охраняемых недействительными specs_ItemCommand(источник, объект, DataListCommandEventArgs е)
{
строка i = преобразовать.ToString(e. CommandArgument);
Сессия ["id"] = i;
Ответ.Перенаправление ("Selected_Item. aspx");
}

protected void dlPaging_ItemCommand1(object source, RepeaterCommandEventArgs e)
{
если (электронная.Имя_команды."Равно" ("lnkbtnPaging"))
{
CurrentPage = Конвертировать.ToInt16(электронная.CommandArgument.Метод toString());
showData();
}
}

охраняемых недействительными Linknext_Click(объект отправителя, EventArgs в электронной)
{
CurrentPage += 1;
showData();
}
охраняемых недействительными Linkback_Click(объект отправителя, EventArgs в электронной)
{
CurrentPage -= 1;
showData();
}

охраняемых недействительными dlPaging_ItemDataBound1(объект отправителя, RepeaterItemEventArgs е)
{
LinkButton lnkbtnPage = (LinkButton)e.Item.FindControl("lnkbtnPaging");
if (lnkbtnPage.Командный аргумент.ToString () = = CurrentPage.Метод toString())
{
lnkbtnPage.Enabled = false;
lnkbtnPage.Шрифт.Жирный = истина;
}
}
}

1 Ответов

Рейтинг:
12

OriginalGriff

Лучший способ-это вот так для DataReader:

using (SqlConnection con = new SqlConnection(strConnect))
    {
    con.Open();
    using (SqlCommand cmd = new SqlCommand("SELECT description FROM myTable WHERE Id = @ID", con))
        {
        cmd.Parameters.AddWithValue("@ID", userId);
        using (SqlDataReader reader = cmd.ExecuteReader())
            {
            while (reader.Read())
                {
                int id = (int) reader["Id"];
                string desc = (string) reader["description"];
                Console.WriteLine("ID: {0}\n    {1}", id, desc);
                }
            }
        }
    }
И это для DataAdapter:
using (SqlConnection con = new SqlConnection(strConnect))
    {
    con.Open();
    using (SqlDataAdapter da = new SqlDataAdapter("SELECT MyColumn1, MyColumn2 FROM myTable WHERE mySearchColumn = @SEARCH", con))
        {
        da.SelectCommand.Parameters.AddWithValue("@SEARCH", myTextBox.Text);
        DataTable dt = new DataTable();
        da.Fill(dt);
        myDataGridView.DataSource = dt;
        }
    }
То using блоки гарантируют, что объекты будут закрыты и удалены автоматически, когда вы закончите с ними.


navi G

Thanx OriginalGriff ты всегда помогаешь мне.

OriginalGriff

Пожалуйста!

Richard Deeming

Нет необходимости звонить Open если вы используете адаптер данных - он позаботится об этом за вас. :)

OriginalGriff

Правда... Просто привычка, наверное.