Жизненный цикл страницы, идет ли соединение с БД в Page_Load - PullRequest
0 голосов
/ 15 июня 2011

В настоящее время у меня есть следующий код:

void Page_Load(object sender, System.EventArgs e)
 {       
       string connectionString = "server=abc;database=abc;uid=abc;pwd=1234";
       SqlConnection mySqlConnection = new SqlConnection(connectionString);
       string procedureString = "Callin_Insert";
       SqlCommand mySqlCommand = mySqlConnection.CreateCommand();
       mySqlCommand.CommandText = procedureString;
       mySqlCommand.CommandType = CommandType.StoredProcedure;
       mySqlCommand.Parameters.Add("@LVDate", SqlDbType.DateTime).Value = DateTime.Now;
       mySqlCommand.Parameters.Add("@LVTime", SqlDbType.DateTime).Value = DateTime.Now;
       mySqlCommand.Parameters.Add("@CuID", SqlDbType.Int).Value = CustID;
       mySqlCommand.Parameters.Add("@Type", SqlDbType.Int).Value = Keypress;
       mySqlConnection.Open();
       mySqlCommand.ExecuteNonQuery();
       SqlDataAdapter mySqlDataAdapter = new SqlDataAdapter();
       mySqlDataAdapter.SelectCommand = mySqlCommand;
       mySqlConnection.Close();
}

По сути, я открываю соединение с базой данных во время загрузки страницы. Я также закрываю это соединение в page_load. Часть моей проблемы заключается в том, что CustID и Keypress не проходят, потому что они происходят позже в жизненном цикле страницы. Как лучше всего открыть соединение, получить 2 переменные (когда они введены пользователем), передать их в базу данных и закрыть соединение.

Я попробовал кое-что запустить _OnLoad. Но это тоже не сработало.

Любые мысли или предложения, с благодарностью.

Ответы [ 2 ]

0 голосов
/ 15 июня 2011

Первый из SqlConnection имеет интерфейс IDisposible, что означает, что гораздо безопаснее обернуть ваш код с помощью следующего оператора.

string connectionString = "server=abc;database=abc;uid=abc;pwd=1234";
using (SqlConnection mySqlConnection = new SqlConnection(connectionString))
{
    string procedureString = "Callin_Insert";
    SqlCommand mySqlCommand = new SqlCommand(procedureString, mySqlConnection);
    mySqlCommand.CommandType = CommandType.StoredProcedure;

    mySqlCommand.Parameters.Add("@LVDate", SqlDbType.DateTime).Value = DateTime.Now;
    mySqlCommand.Parameters.Add("@LVTime", SqlDbType.DateTime).Value = DateTime.Now;
    mySqlCommand.Parameters.Add("@CuID", SqlDbType.Int).Value = CustID;
    mySqlCommand.Parameters.Add("@Type", SqlDbType.Int).Value = Keypress;

    mySqlConnection.Open();
    mySqlCommand.ExecuteNonQuery();

    //i have no idea what does this mean, data adapter is for filling Datasets and DataTables
    SqlDataAdapter mySqlDataAdapter = new SqlDataAdapter();
    mySqlDataAdapter.SelectCommand = mySqlCommand;
}

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

Он будет знать, как обращаться с Page.IsPostBack, который вы еще не внедрили, но должны, с пейджингом и другими необходимыми вещами.

0 голосов
/ 15 июня 2011

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

Я предлагаю создать SqlDataSource на вашей странице aspx (не за кодом) и привязать к нему свой контроль. Затем подключите событие Selecting и там заполните ваши параметры. Это должно произойти позже в жизненном цикле страницы, поэтому значения параметров будут установлены.

...