C# 检查数据库中是否存在行、列等的有效方法?

C# 检查数据库中是否存在行、列等的有效方法?,c#,winforms,sql-server-2008,visual-studio-2015,C#,Winforms,Sql Server 2008,Visual Studio 2015,我一直在使用以下代码检查SQL Server数据库中是否存在特定的行、列、表等。我想知道是否有更有效的方法来做到这一点。 注1:我特别试图消除使用数据表dt_local的情况。 注2:我使用的是C、WinForms、VS-2015和SQL Server 2008 R2 Express 你有一些选择——可能更有效,也可能不更有效。要真正确定,唯一的方法就是测试它。下面是我头顶上的两个: 使用COL_LENGTH T-SQL函数查询数据库元数据-查看给定表中给定列的长度是否为NULL 如果COL_L

我一直在使用以下代码检查SQL Server数据库中是否存在特定的行、列、表等。我想知道是否有更有效的方法来做到这一点。 注1:我特别试图消除使用数据表dt_local的情况。 注2:我使用的是C、WinForms、VS-2015和SQL Server 2008 R2 Express


你有一些选择——可能更有效,也可能不更有效。要真正确定,唯一的方法就是测试它。下面是我头顶上的两个:

使用COL_LENGTH T-SQL函数查询数据库元数据-查看给定表中给定列的长度是否为NULL

如果COL_LENGTH'table_name','column_name'为空 开始 /列不存在,或者调用方没有查看该对象的权限/ 结束

有关更多信息,请参见此处:

执行一个简单的SELECTTOP1*from查询,将其加载到datatable并枚举字段,检查是否返回了您要查找的字段


这里最好的选择可能是使用数据库元数据,而不是数据查询。考虑:

select count(1) as [Count] from sys.columns
where [object_id] = object_id('PRH') and [name] = 'ACTIV'
如果列不存在,则返回0。有了它,您可以使用:

cmd.CommandText = @"
    select count(1) as [Count] from sys.columns
    where [object_id] = object_id('PRH') and [name] = 'ACTIV'";

int count = (int)cmd.ExecuteScalar();
return count == 1;
请注意,如果需要,可以参数化此查询:

cmd.CommandText = @"
    select count(1) as [Count] from sys.columns
    where [object_id] = object_id(@table) and [name] = @column";
cmd.Parameters.AddWithValue("@table", tableName);
cmd.Parameters.AddWithValue("@column", columnName);
要对信息架构执行相同操作,请执行以下操作:

select COUNT(1) as [Count] from INFORMATION_SCHEMA.COLUMNS
where TABLE_NAME = 'PRH' and COLUMN_NAME = 'ACTIV'

也可以参数化

您可能可以直接查询目录表元数据,而无需加载任何数据或使用executereader,如果返回的内容为true,否则为False而不知道queryLe是什么,则很难说这有多好或有多坏-效率可能非常低;但是,当然没有必要用它来填充数据表-见鬼,只要ExecuteOnQuery就足够了直到2008 R2仍然在扩展支持中。。。差不多;最后的截止日期是2019年7月,但坦率地说,你真的应该,真的应该作为优先事项采取行动now@MarcGravell-我很抱歉。一个示例查询是从PRHThank选择ACTIV,感谢您的回复。正如我所说的,我想用它作为一个通用函数来检查许多类型的事情,比如是否存在一行,是否存在一个表等等。代码中提到的注释是为了简单,而不是字面意义上的。
select COUNT(1) as [Count] from INFORMATION_SCHEMA.COLUMNS
where TABLE_NAME = 'PRH' and COLUMN_NAME = 'ACTIV'