Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 删除命令不起作用_C#_Ado.net - Fatal编程技术网

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块