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

时间:2014-10-08 20:41:46

标签: c# .net winforms system.data.sqlite

在我的项目中,我正在使用System.Data.Sqlite。我想创建一个带有image列的表。我正在设置默认图像(即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 { }

有什么问题?

1 个答案:

答案 0 :(得分:0)

我怀疑你可以在DDL语句中参数化blob。 docs说:

  

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

我是否能以这种格式包含图像数据,我不知道;转换为X'..'格式可能不是问题,但创建和提供这么长的字符串可能会很棘手。理论上有一个option来控制它:

  

SQLITE_OMIT_BLOB_LITERAL

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

This post也排除了它,至少是参数..

如果您设法让它以文字形式工作,请在此处发布!