我想扫描数据库,然后使用DataReader创建一个表(如果还不存在)。我找到了一个用于创建表的代码块,但是它在VB中,因此不理想,因为我的其余代码是C#。无论如何,我都无法使它正常工作。
这是我的代码,感谢您的关注:
Australia
答案 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));