如何?:如果数据库中不存在 table,请使用 DataReader 创建它
how to?: if table doesn't exist on database, create it using DataReader
我想扫描一个数据库,然后使用 DataReader 创建一个 table(如果它不存在)。我找到了一段用于创建 table 的代码块,但它位于 VB 中,这并不理想,因为我的其余代码是 C#。无论如何,我无法让它以任何方式工作。
这是我的代码,感谢您的观看:
var dif = new DataInterfaceFactory(DatabaseTypes.SqlServer, " DATABASE_NAME", "[SERVER_NAME]");
using (DataReader dr = dif.GetDataReader())
{
exists = m_api.Database.ExecuteCommand(@"IF EXISTS(SELECT COUNT(1) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'TABLE_NAME')");
while (dr.Read())
{
if (exists == 0)
{
TableBuilder calculationSchedule = new TableBuilder("TABLE_NAME", dif.DatabaseType);
calculationSchedule.AddField("TABLE_NAME_UID", DbFieldType.int_, 0, false, null, true, null);
calculationSchedule.AddField("SERVER_NAME", DbFieldType.nvarchar_);
calculationSchedule.AddField("DATABASE_NAME", DbFieldType.nvarchar_);
calculationSchedule.AddField("CHECK_DATE", DbFieldType.datetime_);
calculationSchedule.AddField("IS_RUNNING", DbFieldType.int_);
using (CommandExecutor cex = dif.GetCommandExecutor())
{
calculationSchedule.BuildTable(cex);
}
}
}
}
尝试使用数据表:
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));
您可以使用 SQL 服务器信息模式来识别 RDBMS 上是否存在 table(s)。
select count(1) from INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = 'mySchema' and TABLE_NAME = 'myTable'
如果结果为0,表示table不存在,
如果结果为 1,则 table 存在于架构下。
现在,您可以使用 DataReader 查询您的数据库并检查您的 table 是否存在。
然后您可以发出创建命令来创建您的 Table
如果不存在,这将创建 table
BEGIN
if not exists (select * from INFORMATION_SCHEMA.TABLES where TABLE_NAME = 'CALCULATION_SCHEDULE')
create table CALCULATION_SCHEDULE (
Name varchar(64) not null
...
)
END;
这是我的问题的解决方案:
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");
}
}
我想扫描一个数据库,然后使用 DataReader 创建一个 table(如果它不存在)。我找到了一段用于创建 table 的代码块,但它位于 VB 中,这并不理想,因为我的其余代码是 C#。无论如何,我无法让它以任何方式工作。
这是我的代码,感谢您的观看:
var dif = new DataInterfaceFactory(DatabaseTypes.SqlServer, " DATABASE_NAME", "[SERVER_NAME]");
using (DataReader dr = dif.GetDataReader())
{
exists = m_api.Database.ExecuteCommand(@"IF EXISTS(SELECT COUNT(1) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'TABLE_NAME')");
while (dr.Read())
{
if (exists == 0)
{
TableBuilder calculationSchedule = new TableBuilder("TABLE_NAME", dif.DatabaseType);
calculationSchedule.AddField("TABLE_NAME_UID", DbFieldType.int_, 0, false, null, true, null);
calculationSchedule.AddField("SERVER_NAME", DbFieldType.nvarchar_);
calculationSchedule.AddField("DATABASE_NAME", DbFieldType.nvarchar_);
calculationSchedule.AddField("CHECK_DATE", DbFieldType.datetime_);
calculationSchedule.AddField("IS_RUNNING", DbFieldType.int_);
using (CommandExecutor cex = dif.GetCommandExecutor())
{
calculationSchedule.BuildTable(cex);
}
}
}
}
尝试使用数据表:
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));
您可以使用 SQL 服务器信息模式来识别 RDBMS 上是否存在 table(s)。
select count(1) from INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = 'mySchema' and TABLE_NAME = 'myTable'
如果结果为0,表示table不存在, 如果结果为 1,则 table 存在于架构下。
现在,您可以使用 DataReader 查询您的数据库并检查您的 table 是否存在。
然后您可以发出创建命令来创建您的 Table
如果不存在,这将创建 table
BEGIN
if not exists (select * from INFORMATION_SCHEMA.TABLES where TABLE_NAME = 'CALCULATION_SCHEDULE')
create table CALCULATION_SCHEDULE (
Name varchar(64) not null
...
)
END;
这是我的问题的解决方案:
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");
}
}