Попытка создать таблицу и вставить в базу данных - PullRequest
0 голосов
/ 25 января 2019

Я ожидаю, что следующий код проверит, существует ли таблица в базе данных, и, если нет, создайте ее. Если «существует» == 0, он не существует, если «существует» = 1, он существует. После запуска этот код "существует" по-прежнему == 0. Что мне не хватает? Спасибо:

РЕДАКТИРОВАТЬ: как только я передаю "command.ExecuteNonQuery ()", он выдает ошибку.

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_NAME = 'CALCULATION_SCHEDULE'");

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

        if (exists == 0)

        {
            var conStr = "Data Source = d2sql4.d2.wdm; Integrated Security = True; Connect Timeout = 30; Encrypt = False; TrustServerCertificate = False; ApplicationIntent = ReadWrite; MultiSubnetFailover = False";
            using (SqlConnection con = new SqlConnection(conStr))
            {
                try
                {                                 
                    // Open the SqlConnection.                                    
                    con.Open();

                    // The following code uses an SqlCommand based on the SqlConnection.                                   
                    using (SqlCommand command = new SqlCommand("CREATE WDM_SOFTWARE_INFO.CALCULATION_SCHEDULE(CALCULATION_SCHEDULE_UID INT,SERVER_NAME char(25),DATATABLE_NAME char(20),LAST_CHECK_DATE DATE,IS_RUNNING INT);", con))
                        command.ExecuteNonQuery();
                }

                catch
                {
                    Console.WriteLine("Error: could not create CALCULATION_SCHEDULE");
                }
            }
     }
    }
   }

Ответы [ 2 ]

0 голосов
/ 25 января 2019

] проверить это, это хороший способ для проверки. Будьте уверены в части ConnectionStrig

    var conStr = @"data source=d2sql4.d2.wdm\nkdes;initial catalog=WDM_SOFTWARE_INFO;MultipleActiveResultSets=True;Connect Timeout = 30; Encrypt = False; TrustServerCertificate = False; ApplicationIntent = ReadWrite; MultiSubnetFailover = False";

    var existQuery = @"SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE' AND TABLE_NAME = 'CALCULATION_SCHEDULE'";

    var createQuery = "CREATE TABLE [CALCULATION_SCHEDULE](CALCULATION_SCHEDULE_UID INT,SERVER_NAME char(25),DATATABLE_NAME char(20),LAST_CHECK_DATE DATE,IS_RUNNING INT)";

    SqlConnection con = new SqlConnection(conStr);
    if(con.State == System.Data.ConnectionState.Closed)
        con.Open();
    var sqlCmd = new SqlCommand(existQuery, con);

    var dr = sqlCmd.ExecuteReader();

    if (!dr.HasRows)
    {
        sqlCmd.CommandText = createQuery;
        sqlCmd.ExecuteNonQuery();
    }
    else
        Console.WriteLine("your message");
0 голосов
/ 25 января 2019

Это решение моей проблемы:

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");
                }
             }
...