如何在代码隐藏中使用 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] 时,我的问题从这里开始。名字,似乎不喜欢我加零的时候。 请帮忙。 谢谢
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...
}
}