gpt4 book ai didi

c# - 从表中检索行会导致列名无效错误

转载 作者:太空宇宙 更新时间:2023-11-03 14:50:07 25 4
gpt4 key购买 nike

我正在尝试删除数据库表中的一条记录。我试图根据下拉列表中选定的名称将其删除。当我调试我的代码时,数据集中没有任何记录可用,并且出现异常“无效的列名”,而如果我在 SQL Server 中运行相同的查询,一切似乎都很好。

这是我的代码:

protected void SubCategory_Delete_Click(object sender, EventArgs e)
{
try
{
var conn = new SqlConnection(@"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\template_castle.mdf;Integrated Security=True");
var adpt = new SqlDataAdapter("Select * from tc_prod_subcategory where subcategory_name = ' ' "+ DropDownList2.SelectedItem.Value, conn);

var ds = new DataSet();
adpt.Fill(ds, "tc_prod_subcategory");

foreach (DataRow dr in ds.Tables["tc_prod_subcategory"].Rows)
{
dr.Delete();
}

SqlCommandBuilder build = new SqlCommandBuilder(adpt);
adpt.Update(ds, "tc_prod_subcategory");
Updatesubcategorygrid();
updatedelete_dropdown();
Lblsub_catdelete.Text = "Deleted Successfully";
}
catch(Exception ex)
{
Lblsub_catdelete.Text = ex.Message;
}
}

这与我在 SQL Server 2014 中运行时的查询相同;一切运行良好:

Select * 
from tc_prod_subcategory
Where subcategory_name= 'Favicon'

最佳答案

错误是由于 where 子句中撇号的位置不正确造成的。它应该是这样的:

"Select * from tc_prod_subcategory where subcategory_name = '" + DropDownList2.SelectedItem.Value + "'"

但是该代码容易受到 SQL injection 的攻击, 所以你应该使用参数而不是连接字符串。

var conn = new SqlConnection(@"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\template_castle.mdf;Integrated Security=True");
var adpt = new SqlDataAdapter("Select * from tc_prod_subcategory where subcategory_name = @subcategory_name", conn);
var ds = new DataSet();

adpt.SelectCommand.Parameters.AddWithValue("@subcategory_name", DropDownList2.SelectedItem.Value);

关于c# - 从表中检索行会导致列名无效错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52130499/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com