如何使用c#代码检查sql server中是否有表?

时间:2009-07-29 07:45:53

标签: c# sql-server

我喜欢编写c#代码,我想通过它来检查sqlserver中是否有表?

任何人都可以给我一个示例代码吗?

5 个答案:

答案 0 :(得分:5)

此查询应该为您提供答案:

select count(id) from sysobjects where name = 'thetable' and type = 'U'

如果计数为1,则表格存在,如果为0则表格不存在。

包装成方法:

private bool TableExists(string tableName)
{
    using (SqlConnection conn = new SqlConnection(GetConnectionString()))
    {
        using (SqlCommand cmd = new SqlCommand("select count(id) from sysobjects where name = @tableName and type = 'U'", conn))
        {
            cmd.Parameters.AddWithValue("@tableName", tableName);
            conn.Open();
            int count = (int)cmd.ExecuteScalar();
            conn.Close();
            return count == 1;
        }
    }
}

答案 1 :(得分:3)

using(SqlConnection connection =
    new SqlConnection(connectionString))
{
connection.Open();
DataTable dt = connection.GetSchema();
connection.Close();
}

请参阅here

答案 2 :(得分:1)

对于支持它的较新SQL Server版本(至少2005和2008),您可以编写INFORMATION_SCHEMA个查询。例如。如果存在用户表,则以下查询(针对您的特定应用程序数据库而不是master运行时)将返回一行。

SELECT * FROM information_schema.tables
WHERE TABLE_NAME = 'Users'
AND   TABLE_TYPE = 'BASE TABLE' -- could be 'VIEW'

或者只返回数据库中的所有表名,如下所示:

SELECT TABLE_NAME FROM information_schema.tables
WHERE  TABLE_TYPE = 'BASE TABLE' -- could be 'VIEW'

我确定您已经有C#ADO代码来运行查询(或者您可以将上述内容转换为存储过程)。您可以收集大量其他有用的信息,而不必担心所有神秘的sysobjects参数/列/类型。

答案 3 :(得分:0)

使用information_schema

选择a.table_name 来自information_schema.tables a其中table_name类似于''

答案 4 :(得分:0)

您需要查询SQLServer数据库中的sysobject表,以查找数据库中是否存在特定的表/对象。

SELECT 1 AS Exists FROM dbo.sysobject where name = @tableName AND xtype = 'U'

打开SQLConnection并将此查询包装在SqlCommand对象中并执行它。