如何?:如果数据库中不存在表,则使用DataReader创建表

时间:2019-01-24 11:14:42

标签: c# sql database sqldatareader datareader

我想扫描数据库,然后使用DataReader创建一个表(如果还不存在)。我找到了一个用于创建表的代码块,但是它在VB中,因此不理想,因为我的其余代码是C#。无论如何,我都无法使它正常工作。

这是我的代码,感谢您的关注:

Australia

3 个答案:

答案 0 :(得分:2)

您可以使用SQL Servers信息架构来识别RDBMS上是否存在表。

select count(1) from INFORMATION_SCHEMA.TABLES 
WHERE TABLE_SCHEMA = 'mySchema' and TABLE_NAME = 'myTable'

如果结果为0,则表示该表不存在, 如果结果为1,则该表存在于架构下。

现在,您可以使用datareader查询数据库并检查表是否存在。

然后您可以发出create命令来创建表格


如果不存在则创建表

BEGIN
    if not exists (select * from INFORMATION_SCHEMA.TABLES where TABLE_NAME = 'CALCULATION_SCHEDULE')
        create table CALCULATION_SCHEDULE (
            Name varchar(64) not null
            ...
        )
END;

答案 1 :(得分:0)

这是我的问题的解决方案:

var dif = new DataInterfaceFactory(DatabaseTypes.SqlServer, "WDM_SOFTWARE_INFO", "d2sql4.d2.wdm");

        using (DataReader dr = dif.GetDataReader())
        {
            dr.ExecuteReader("SELECT COUNT(1) AS TABLECOUNT FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'dbo' AND TABLE_NAME = 'CALCULATION_SCHEDULE'");

            var exists = Convert.ToInt32(dr["TABLECOUNT"]);

            CommandExecutor CE = dif.GetCommandExecutor();
            try
            {
                if (exists == 0)
                {
                    string sql = "CREATE TABLE dbo.CALCULATION_SCHEDULE(CALCULATION_SCHEDULE_UID INT,SERVER_NAME char(25),DATATABLE_NAME char(20),LAST_CHECK_DATE DATE,IS_RUNNING INT)";
                    CE.ExecuteNonQuery(sql);
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("Error: could not create CALCULATION_SCHEDULE");
            }
         }

答案 2 :(得分:-1)

尝试使用数据表:

            DataTable calculationSchedule = new DataTable();
            calculationSchedule.Columns.Add("CALCULATION_SCHEDULE_UID", typeof(int));
            calculationSchedule.Columns.Add("SERVER_NAME", typeof(string));
            calculationSchedule.Columns.Add("DATABASE_NAME", typeof(string));
            calculationSchedule.Columns.Add("LAST_CHECK_DATE", typeof(DateTime));
            calculationSchedule.Columns.Add("IS_RUNNING", typeof(int));