删除命令不起作用

时间:2013-12-28 21:44:50

标签: c# ado.net

我想问一下这段代码有什么问题。我正在运行它,没有任何内容更改为数据源。

DataRow[] dr = this.U_dt.Select("UserName='"+user+"'");
DataRow dr1 = dr[0];

//U_ad is a dataadapter
//U_dt is a datatable. U_ad.fill(U_dt);

this.U_dt.Rows.Remove(dr1);
U_ad.DeleteCommand = new SqlCommand("Delete from [Users] where [UserName]=@User", con);
U_ad.DeleteCommand.Parameters.Add("@User", SqlDbType.NChar, 20, "[UserName]");

this.U_ad.Update(U_dt);

3 个答案:

答案 0 :(得分:0)

您尝试将参数@User的值作为字符串"[UserName]"传递 这不是包含用于搜索删除的用户名的变量的值,而是一个文字字符串 当然,UserName列中没有找到任何文字值为"[UserName]"

的内容

请尝试使用您在

之前选择中应用的变量user
SqlCommand cmd = new SqlCommand("Delete from [Users] where [UserName]=@User", con);
cmd.Parameters.Add("@User", SqlDbType.NChar, 20, user);
cmd.ExecuteNonQuery();

我直接使用了SqlCommand ExecuteNonQuery方法,但这也可以使用DeleteCommand的{​​{1}}

答案 1 :(得分:0)

你可以把你的代码放在try catch中吗

try{
   SqlCommand cmd = new SqlCommand("Delete from [Users] where [UserName]=@User", con);
   cmd.Parameters.Add("@User", SqlDbType.NChar, 20, user);
   cmd.ExecuteNonQuery();
}catch(Exception ex)
{
   System.Console.WriteLine( "  ERROR:" + ex.Message );
}

也可能有一些外键可能会导致您不删除该条目。为了安全起见,将这些sql查询放在try catch中总是明智的。 这可能会有助ADO.net simple project

答案 2 :(得分:0)

我认为问题在于,在调用update之前从数据表中删除要删除的行... update命令迭代数据表中的行,并对rowstate == Deleted的所有行执行delete命令。但是您的行已从数据表中删除,因此删除命令根本不会执行。

可能的解决方案是执行U_ad.DeleteCommand.ExecuteNonQuery()(在设置@User参数之后)并且根本不调用DataAdapter.Update或执行dr1.Delete()而不是this.U_dt.Rows.Remove (dr1)并调用DataAdapter.Update