C# 为什么sql删除查询不起作用

C# 为什么sql删除查询不起作用,c#,C#,我有一个表table1,其中包含字段id(int),name(nchar),grade(real)。 以下代码不起作用。没有错误或警告。代码执行良好,但受影响的行数=0 MsSql服务器 sqlConnection1.Open(); SqlCommand cmd = new SqlCommand("Delete from [table1] where [id] = 1", sqlConnection1); int c = cmd.ExecuteNonQuery(); sqlConnection1

我有一个表
table1
,其中包含字段
id(int)
name(nchar)
grade(real)
。 以下代码不起作用。没有错误或警告。代码执行良好,但受影响的行数=0

MsSql服务器

sqlConnection1.Open();
SqlCommand cmd = new SqlCommand("Delete from [table1] where [id] = 1", sqlConnection1);
int c = cmd.ExecuteNonQuery();
sqlConnection1.Close();

所有其他查询都运行良好。

我知道这听起来可能很愚蠢,但调用中是否有ID为1的数据?您能看到它通过SQL探查器执行吗?如果通过SSMS执行,会发生什么情况?

我知道这听起来可能很愚蠢,但调用中是否有ID为1的数据?您能看到它通过SQL探查器执行吗?如果通过SSMS执行,会发生什么情况?

思考:

  • 是否有[id]1的行
  • 你有正在发射的扳机吗
我猜是第二个。。。该数字在考虑触发器之后,是上次操作的行数。

  • 是否有[id]1的行
  • 你有正在发射的扳机吗

我猜是第二个。。。这个数字是在考虑触发器之后的,是上次操作的行数。

在Sql Management studio中运行查询时是否有效?

在Sql Management studio中运行查询时是否有效?

是对其他人已经提出的问题的略微扩展。您确定目标表中有要删除的记录吗?此外,您是否确定从正确的数据库获取了表?例如,默认值可能是tempdb,并且恰好有一个具有目标名称和id列的表

首先从SQL提示符中进行选择,以确保存在您要查找的类型的项:


从[database].[schema].[table1]中选择前10个*,其中[id]=1

如果这提供了结果,请尝试更改您的命令,以明确说明数据库和架构:


从[database].[schema].[table1]中删除,其中[id]=1

对其他人已经提出的问题稍作扩展。您确定目标表中有要删除的记录吗?此外,您是否确定从正确的数据库获取了表?例如,默认值可能是tempdb,并且恰好有一个具有目标名称和id列的表

首先从SQL提示符中进行选择,以确保存在您要查找的类型的项:


从[database].[schema].[table1]中选择前10个*,其中[id]=1

如果这提供了结果,请尝试更改您的命令,以明确说明数据库和架构:


从[database].[schema].[table1]中删除,其中[id]=1

除了Marc Gravell关于触发器的评论之外,您还应该检查是否存在带有ON DELETE RESTRICT`的外键约束(并且错误消息在到达您之前不知何故消失了…)

除了Marc Gravell关于触发器的评论之外,您还应该检查,如果存在带ON DELETE RESTRICT`的外键约束(并且错误消息在发送给您之前以某种方式消失…

可能是愚蠢的注释,但是否有Id 1?看起来没有Id为1的记录?可能是愚蠢的注释,但是否有Id为1?看起来没有Id为1的记录用于触发器。OP还应检查删除限制上的
外键。+1用于触发。OP还应检查删除限制外键时的
。
SELECT TOP 10 * FROM [database].[schema].[table1] WHERE [id] = 1
DELETE FROM [database].[schema].[table1] WHERE [id] = 1