Vasily Tserekh Ответов: 1

Sql excecute scalar возвращает null, когда не отлаживается


привет
Я кодирую мигратор баз данных и выполняю следующие функции.
Второй вариант, если таблица базы данных была создана в первой функции, всегда возвращает null, а затем завершает работу при вызове функции trim. Дело в том, что если я помещаю точку останова в скалярную функцию execute, она работает нормально и возвращает значение db_version, но если я помещаю точку останова немного ниже, то значение версии равно нулю
Есть идеи?


private static void CreateVersionTable()
{
    if (!DatabaseManager.TableExists("poscuba_info"))
    {
        string sqlTable = @"CREATE TABLE poscuba_info(
                       db_version   CHAR(10));";

        string sqlVersion = @"INSERT INTO poscuba_info (db_version) VALUES ('1.02') ";

        try
        {
            DatabaseManager.executeSQL(sqlTable);

            DatabaseManager.executeSQL(sqlVersion);

            dataBaseVersion = "1.02";
        }
        catch (Exception e)
        {
            MigrationError = e.Message;
        }
    }
}

public static string GetDBVersion()
{
    string version = "";

    try
    {
        version = (string)DatabaseManager.executeScalar("Select db_version from poscuba_info");

        if (version == "")
        {
            MigrationError = "Version not found";
        }
    }
    catch (Exception e)
    {
        MigrationError = e.Message;
    }

    dataBaseVersion = version.Trim();

    return dataBaseVersion;
}


Что я уже пробовал:

Я пробовал отлаживать и это работает когда отлаживается шаг за шагом

phil.o

Было бы лучше проверить if (string.IsNullOrEmpty(version)).
Можем ли мы увидеть определение executeScalar способ получения DatabaseManager класс?

Vasily Tserekh

статический публичный инт функции executesql(строка SQL-запрос)
{
OleDbConnection connection = новый OleDbConnection(connectionString);
соединение.Открыть();
Команда oledbcommand объект = новый объект oledbcommand(SQL-запрос на подключение);
команда возврата.Метод executenonquery();
}

статический публичный объект executeScalar(string sqlQuery)
{
OleDbConnection connection = новый OleDbConnection(connectionString);
соединение.Открыть();
Команда oledbcommand объект = новый объект oledbcommand(SQL-запрос на подключение);
команда возврата.Executescalar так();
}

1 Ответов

Рейтинг:
0

Mehdi Gholam

Возможно, это проблема времени в режиме выпуска, попробуйте добавить следующее:

DatabaseManager.executeSQL(sqlTable);
Thread.Sleep(1000); // add a 1s wait here 
DatabaseManager.executeSQL(sqlVersion);


Vasily Tserekh

Это не сработало. :(

Mehdi Gholam

Какую ошибку вы получаете?