页面生命周期,数据库连接是否在Page_Load中

时间:2011-06-15 14:25:08

标签: c# asp.net database-connection parameter-passing page-lifecycle

目前我有以下代码:

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期间打开了与数据库的连接。我也在page_load中关闭该连接。我的部分问题是CustID& Keypress没有通过,因为它们发生在页面生命周期的后期。打开连接的最佳方法是什么,获取2个变量(当用户输入它们时),将它们传递给数据库,然后关闭连接。

我尝试过的事情是运行它_OnLoad。但这也不起作用。

非常感谢任何想法或建议。

2 个答案:

答案 0 :(得分:0)

认为这里有一些问题...首先,为什么要运行查询然后将其传递给数据适配器?数据适配器将在查询时运行select命令。

我建议在你的aspx页面上创建一个SqlDataSource(不是后面的代码)并将你的控件绑定到它。然后连接选择事件并在其中填充参数。这应该在页面生命周期的后期发生,这样就可以设置参数值。

答案 1 :(得分:0)

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,但应该是分页和其他你需要的东西。