[英]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.