繁体   English   中英

当表有0行时如何检查数据库表是否存在?

[英]How to check if database table exists when the table has 0 rows?

编辑:很抱歉浪费大家的时间,下面的代码显示我刚刚忘记了 C_TABLE 上的“C”,在更正后它工作正常。

在下面的代码中,如果表存在于数据库中,则“存在”应该 == 1。 但是,它为我返回 0,即使该表存在于数据库中。 我不确定为什么会这样?

谢谢:

foreach (var row in calcSched)
            {
                var dif3 = new DataInterfaceFactory(DatabaseTypes.SqlServer, row.DatabaseName, row.ServerName);

                using (DataReader dr2 = dif3.GetDataReader())
                {
                    dr2.ExecuteReader("SELECT COUNT(1) AS TABLECOUNT2 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'dbo' AND TABLE_NAME = 'C_TABLE'");
                    var exists = Convert.ToInt32(dr2["TABLECOUNT2"]);
                    CommandExecutor CE = dif3.GetCommandExecutor();

                    try
                    {
                        if (exists == 0)
                        {
                            string sql = "CREATE TABLE dbo.C_TABLE(COLUMN_UID INT, KIP INT, SD_DATE DATE, ST INT, CS_DATE DATE, CE_DATE DATE, SM CHAR(100), PRG CHAR(20)";
                            CE.ExecuteNonQuery(sql);
                        }
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine("Error: could not create C_TABLE");
                    }
                }
            }

您正在使用ExecuteReader ,然后您尝试访问其中的数据,而没有先执行dr2.Read()

据我了解,这是 MS SQL Server。 可以直接查询sys.tables。 IE:

select case when exists ( select  *
                from    sys.tables
                where   [name] = 'YourTableName'
                        and is_ms_shipped = 0 )  then 1 else 0 end;

您也可以直接在连接上使用 GetSchema 进行查询。 IE:

void Main()
{
  string strCon =
      @"server=.\sqlexpress;database=Northwind;Trusted_connection=yes";
  DataTable schemaInfo;    
  string[] restrictions = {"Northwind",null,null,"BASE TABLE"};

  using( SqlConnection con = new SqlConnection(strCon))
  {
   con.Open();
   schemaInfo = con.GetSchema("Tables", restrictions );
   con.Close();
  }
  // schemaInfo datatable contains all tables
}

PS:你在误导人们,好像这是在 MS SQL Server 中检查表是否存在的方法,从而导致一些人对正确的方法投反对票。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM