Vistadb Написание SQL для Image DataType

Я недавно начал новую работу, и они используют 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.


person ZoomVirus    schedule 15.09.2014    source источник


Ответы (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();
    }
}
person Kendall Miller    schedule 18.09.2014