如何在代码隐藏中使用 SqlDataAdapter

本文关键字:SqlDataAdapter 隐藏 代码 | 更新日期: 2023-09-27 18:37:02

似乎我的代码不完整或语法错误,但我尽力想出某种解决方案,但到目前为止还没有成功......所以这就是我要做的:我有几个下拉框,并希望将每个下拉框的选定值分配给表适配器中的值。 这是我到目前为止的代码,但不确定缺少什么:

protected void Page_Load(object sender, EventArgs e)
{
    ID = Convert.ToInt32(Request.QueryString["myID"]);
    SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["myconnectionstring"].ConnectionString);
    SqlDataAdapter da = new SqlDataAdapter("SELECT NAME, DEPARTMENT, LOCATION from MyTable WHERE ID =  '" + ID + "' ", con);
    DataTable dt= new DataTable();
    da.Fill(dt);
    ddl_Name.SelectedValue = dt[0].Name;
    ddl_DEPARTMENT.SelectedValue = dt[0].DEPARTMENT;
    ddl_LOCATION.SelectedValue = dt[0].LOCATION;
}

当我键入 dt[0] 时,我的问题从这里开始。名字,似乎不喜欢我加零的时候。 请帮忙。 谢谢

如何在代码隐藏中使用 SqlDataAdapter

dt是没有索引器的DataTable,您需要DataRow s字段,因此您需要首先通过DataTable.Rows[index]获取行:

if(dt.Rows.Count > 0)
{
    DataRow row = dt.Rows[0];
    ddl_Name.SelectedValue = row.Field<string>("Name");
    ddl_DEPARTMENT.SelectedValue = row.Field<string>("DEPARTMENT");
    ddl_LOCATION.SelectedValue = row.Field<string>("LOCATION");
}

您无法直接访问该字段(如果没有强类型DataTable)。您必须使用 DataRow.Field 来获取字段或旧的弱类型索引器的值:

object name = row["Name"];
  • 除此之外,您不应该使用字符串串联来构建 sql 查询。您可以通过 url 参数对 sql 注入开放。使用 sql 参数来防止这种情况。
  • 我假设您使用的是ViewState(默认),然后将此代码块放入!IsPostBack检查中,否则 SelectedIndexChanged 事件将不会触发,因为用户选择将从旧数据库值中覆盖。

protected void Page_Load(object sender, EventArgs e)
{
    if(!IsPostBack)
    {
        ID = Convert.ToInt32(Request.QueryString["myID"]);
        SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["myconnectionstring"].ConnectionString);
        SqlDataAdapter da = new SqlDataAdapter("SELECT NAME, DEPARTMENT, LOCATION from MyTable WHERE ID =  @ID", con);
        DataTable dt= new DataTable();
        da.SelectCommand.Parameters.AddWithValue("@ID", int.Parse(ID));
        da.Fill(dt);
        // Code above... 
    }   
}