0

我最近开始了一份新工作,他们使用 Vistadb,所以我不能在人们建议之前更改软件包。我已经从数据库中获得了byte[]来自不同系统中使用的图像数据类型的 a,因此它的数据类型不能从图像更改为 varbinary。我已经对它进行了更改byte[],现在需要将其放回数据库中的新记录中,但是到目前为止,我似乎无法弄清楚 SQL Query 应该如何处理它。

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

这是通过使用 WPF 表单的 c#.net 完成的。

4

1 回答 1

0

做你想做的事情的关键是使用参数将数据传递给你的 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();
    }
}
于 2014-09-18T14:26:36.197 回答