正在将默认图像设置为Sqlite数据库中的列

本文关键字:数据库 Sqlite 设置 默认 图像 | 更新日期: 2023-09-27 18:25:56

在我的项目中,我使用System.Data.Sqlite。我想创建一个带有图像列的表。我正在设置默认图像(即NoImageAvailable)。但它给了我错误,即SQL logic error or missing database near "@img": syntax error。这是我的密码。

byte[] img = null;
        try
        {
            img = File.ReadAllBytes(Application.StartupPath + 
                                    @"'Resources'General_Images'NOPHOTO.jpg");
        }
        catch { }
        string qry = "CREATE TABLE [CLIENT_MSTR] " +
            "([ID] INTEGER IDENTITY," + 
            "[CLIENT_ID] INTEGER PRIMARY KEY," + 
            "[ABBR] VARCHAR(3) DEFAULT '" + string.Empty + "' UNIQUE," +
            "[PHOTO] BLOB DEFAULT @img)";
        SQLiteCommand cmd = new SQLiteCommand(qry, m_dbConnection);
        cmd.Prepare();
        cmd.Parameters.Add("@img", DbType.Binary, img.Length);
        cmd.Parameters["@img"].Value = img;
        try
        {
            cmd.ExecuteNonQuery();
        }
        catch { }

怎么了?

正在将默认图像设置为Sqlite数据库中的列

我怀疑您能否在DDL语句中参数化blob。医生说:

BLOB文字是包含十六进制数据和前面有一个"x"或"x"字符。示例:X'53514C697465'

我不知道你是否可以包括这种格式的图像数据;转换为X'..'格式可能不是问题所在,但创建和输入这么长的字符串可能很棘手。理论上有一个控制它的选项:

SQLITE_OMIT_BLOB_lilateral

When this option is defined, it is not possible 
to specify a blob in an SQL statement using the X'ABCD' syntax.

这篇文章也排除了它,至少通过参数。。

如果你设法让它在字面上发挥作用,请一定要把它发布在这里!