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();
}
}