Vistadb написание SQL для типа данных изображения

Я недавно начал новую работу, и они используют Vistadb, поэтому я не могу изменить пакет программного обеспечения, пока люди не предложат это. Я получил из базы данных byte[] из типа данных изображения, которое используется в различных системах, поэтому его тип данных не может быть изменен с изображения на varbinary. Я внес изменения в byte[] и теперь мне нужно поместить его обратно в базу данных в новой записи, однако я не могу понять, каким должен быть SQL-запрос для этого до сих пор.

ZZ является byte[] остальное работает нормально, просто нужен способ вставить это в мой SQL-запрос

sql = "INSERT INTO TimeHistory(\"Data\",\"Name\",\"Units\",\"ParameterData\",\"StartTime\",\"EndTime\",\"StorageRate\",\"Measurement\") SELECT \'" +zz+ "\',\'" + Name + "\',\'" + Units + "\',\'" + ParameterData + "\',\'" + start + "\',\'" + end + "\',\'" + storage + "\'" + ",SELECT Max(ID)From Measurement;";

ExecuteScript(sql);

Это делается с помощью C#.net с использованием форм WPF.

1 ответ

Решение

Ключом к выполнению того, что вы хотите, является использование параметров для передачи данных в вашу операцию SQL, а не для преобразования их в строку и встраивания в код TSQL. Это лучшая практика не только потому, что она предотвращает ненужные преобразования типов (скажем, из DateTime в строку и строку обратно в DateTime для хранения), но также и в целях безопасности - она ​​гарантирует, что ядро ​​базы данных только попытается выполнить в качестве кода то, что вы намеревались сделать кодом не данные, которые оказались экранированными, поэтому они были оценены как часть строки.

У нас есть хороший пример того, как это сделать, в наших примерах ADO.NET по адресу: Общие операции в ADO.NET Если вы перейдете на страницу ниже, вы увидите пример "Вставка данных с помощью параметризованной команды", который будет работать с любым типом, как это:

using (VistaDBConnection connection = new VistaDBConnection())
{
    connection.ConnectionString = @"Data Source=C:\mydatabase.vdb5";
    connection.Open();

    using (VistaDBCommand command = new VistaDBCommand())
    {
        int Age = 21;

        command.Connection = connection;
        command.CommandText = "INSERT INTO MyTable (MyColumn) VALUES (@age)";
        command.Parameters.Add("@age", Age);
        command.ExecuteNonQuery();
    }
}
Другие вопросы по тегам