C# 异常详细信息:System.Data.SqlClient.SqlException:列名“PRC0000001”无效
我不断地犯这个错误,我不知道为什么,我还是c的新手。请帮我解决这个问题。我有两个dropdownlist,它将根据第一个dropdownlist选择值填充数据 当我在第一个dropdownlist上选择一个值时,我得到了这个错误 这是我的密码C# 异常详细信息:System.Data.SqlClient.SqlException:列名“PRC0000001”无效,c#,asp.net,C#,Asp.net,我不断地犯这个错误,我不知道为什么,我还是c的新手。请帮我解决这个问题。我有两个dropdownlist,它将根据第一个dropdownlist选择值填充数据 当我在第一个dropdownlist上选择一个值时,我得到了这个错误 这是我的密码 protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { //read sql server conn
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
//read sql server connection string from web.config file
string constring = ConfigurationManager.ConnectionStrings["AccreString"].ConnectionString;
SqlConnection conn = new SqlConnection(constring);
DataTable dt = new DataTable("emed_province");
using (conn)
{
conn.Open();
SqlCommand comm = new SqlCommand("SELECT * FROM emed_province ORDER BY PROVINCE_NAME ASC", conn);
SqlDataAdapter adptr = new SqlDataAdapter(comm);
adptr.Fill(dt);
}
ddlProvince.DataSource = dt;
ddlProvince.DataTextField = "PROVINCE_NAME";
ddlProvince.DataValueField = "PROVINCE_CODE";
ddlProvince.DataBind();
}
}
protected void ddlProvince_SelectedIndexChanged(object sender, EventArgs e)
{
string constring = ConfigurationManager.ConnectionStrings["AccreString"].ConnectionString;
SqlConnection conn = new SqlConnection(constring);
DataTable dt = new DataTable("emed_province");
using (conn)
{
conn.Open();
SqlCommand comm = new SqlCommand("SELECT CITY_NAME FROM emed_city WHERE PROVINCE_CODE ="+ddlProvince.SelectedValue, conn);
SqlDataAdapter adptr = new SqlDataAdapter(comm);
adptr.Fill(dt);
}
ddlCity.DataSource = dt;
ddlCity.DataTextField = "CITY_NAME";
ddlCity.DataValueField = "CITY_CODE";
ddlProvince.DataBind();
}
}
这是因为您传递的原始值没有引号,所以数据库认为您指的是字段名 通过使用参数避免这种混乱:
using (conn)
{
conn.Open();
SqlCommand comm = new SqlCommand("SELECT CITY_NAME FROM emed_city WHERE PROVINCE_CODE=@pcode", conn);
comm.Parameters.AddWithValue("@pcode", ddlProvince.SelectedValue);
SqlDataAdapter adptr = new SqlDataAdapter(comm);
adptr.Fill(dt);
}
当使用参数不可行时,这个答案是另一种方法 SQL解释器将值与数据库对象混淆。 通过使SQL语句更显式,可以避免解释器混淆。将列和表名用[方括号]括起来,并将所有值用单引号括起来
using (conn)
{
var whereValue = "'"+ddlProvince.SelectedValue+"'";//wrap in single quotes
conn.Open();
SqlCommand comm = new SqlCommand("SELECT [CITY_NAME] FROM [emed_city] WHERE [PROVINCE_CODE] = "+whereValue;
SqlDataAdapter adptr = new SqlDataAdapter(comm);
adptr.Fill(dt);
}
方括号明确地向SQL Intepreter声明它正在处理一个数据库对象。单引号通知解释器它正在处理一个值
现在,解释器不会将您的值误认为列名。成功了!但我还有一个问题,在我在第一个下拉列表上选择了一个值之后,第二个下拉列表上没有显示数据。您绑定了错误的下拉列表。请将ddlProvince.DataBind;更改为ddlProvincy中的ddlCity.DataBind;\u SelectedIndexChanged methodoops.!!这是我的mi赌注..对不起..你帮了大忙..希望我能在你身上加一个+你可以..如果我的答案解决了你的问题,你可以通过勾选答案左边的空V图标来标记它已解决。