如果数据库还不存在,我希望扫描数据库,然后使用DataReader创建一个表。我找到了一个用于创建表的代码块,但它在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);
}
}
}
}发布于 2019-01-24 11:36:47
您可以使用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;发布于 2019-01-25 08:02:00
以下是解决我的问题的方法:
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");
}
}发布于 2019-01-24 11:21:11
尝试使用datatable:
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));https://stackoverflow.com/questions/54345332
复制相似问题