2014-10-08 58 views
0

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

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 { } 

什么是错?

回答

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也排除出去,AR至少通过参数..

如果你能得到它的工作在字面上,请张贴在这里!