C# 删除命令不起作用
我想问一下这个代码有什么问题。我正在运行这个,数据源没有任何更改C# 删除命令不起作用,c#,ado.net,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 fr
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);
您尝试传递字符串作为参数
@User
的值“[用户名]”
这不是包含要搜索删除的用户名的变量的值,而是文字字符串。
当然,在
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
ExecuteOnQuery
方法,但是使用SqlDataAdapter的DeleteCommand
也应该可以,你能像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中总是明智的。
这可能会有所帮助我认为问题在于,在调用update之前,您从数据表中删除了要删除的行。。。update命令迭代datatable中的行,并对rowstate==Deleted的所有行执行delete命令。。。但是您的行已从datatable中删除,因此根本不会执行delete命令
可能的解决方案是只执行U_ad.DeleteCommand.ExecuteNonQuery()(在设置@User参数后)而不调用DataAdapter.Update,或者执行dr1.Delete()而不是这个.U_dt.Rows.Remove(dr1)并调用DataAdapter.Update尝试将创建参数的行替换为:cmd.Parameters.AddWithValue(“@User”,User);
尝试从ExecuteOnQuery()获取返回值。如果已找到要删除的用户,则应为1;如果未找到该用户,则为0。同时验证变量user的值,并检查所提供名称的用户是否存在。因此,nchar类型的列将用空格填充其值以填充列长度。因此,如果您的用户在列中为“JOHN”,则还有16个空格需要填充我列出了固定长度的列。如果可能的话,试着将您的列更改为nvarchar数据类型。关于这个问题有什么消息吗?似乎另一个(复制)答案有效,所以我只是想知道我的错误是什么?我编辑了您的标题。请参阅“”,其中的共识是“不,他们不应该”“。好的,谢谢,先生。我不知道。我在这个问题上使用了comand.executenonquery方法,结果很成功。”。。代码不会返回任何错误,也不会转到catch块