2009-12-22 7 views
2

Я пытаюсь использовать SQLiteFunction из моего кода C# и ADO.NET. Может кто-нибудь сказать, почему я получаю эту проблему?SQLiteFunction Simple Not Working

Необработанное исключение типа 'System.Data.SQLite.SQLiteException' произошло в System.Data.SQLite.dll Дополнительная информация: SQLite ошибка около "DEMOIT": ошибка синтаксиса

Я использую .NET 3.5 x86 с SQLite ADO.NET 1.0.65 - Справка!

public class Program 
    { 
     static void Main(string[ args) 
     { 
      test(); 
     } 


     public static void test() 
     { 
      SQLiteConnection sqlConn = new SQLiteConnection("Data Source=TestFoods.db;"); 
      sqlConn.Open(); 
      SQLiteCommand sqlCmd = new SQLiteCommand("PRAGMA integrity_check" , sqlConn); 
      sqlCmd.ExecuteNonQuery(); 
      SQLiteFunction.RegisterFunction(typeof(DEMOIT)); 
      sqlCmd = new SQLiteCommand("SELECT * FROM Foods Where Foods.Name DEMOIT '$butter' " , sqlConn); 
      sqlCmd.CommandType = CommandType.Text; 
      SQLiteDataAdapter liteAdapter = new SQLiteDataAdapter(sqlCmd); 
      DataSet dataSet = new DataSet(); 
      liteAdapter.Fill(dataSet , "Foods"); 
     } 

    } 

    [SQLiteFunction(Name = "DEMOIT" , Arguments = 1 , FuncType = FunctionType.Scalar)] 
    public class DEMOIT : SQLiteFunction 
    { 
     public override object Invoke(object[] args) 
     { 
      return Convert.ToString(args[0]) ; 
     } 
    } 

Спасибо!

+0

В вашем SQL есть синтаксическая ошибка. Рядом с 'DEMOIT'. –

ответ

6

DEMOIT - это функция, но вы используете ее, как если бы ее оператор. Попробуйте это:

sqlCmd = new SQLiteCommand("SELECT * FROM Foods Where Foods.Name = DEMOIT('$butter')" , sqlConn); 

или:

sqlCmd = new SQLiteCommand("SELECT * FROM Foods Where DEMOIT(Foods.Name) = '$butter'" , sqlConn); 

образца от моего старого проекта http://war3share.codeplex.com/:

SQL:

select replayHash from customData where key='Rating' and String2Int(value) < 8 

Код:

using System.Data.SQLite; 

namespace War3Share.Client.DAL 
{ 
    [SQLiteFunction(Arguments = 1, FuncType = FunctionType.Scalar, Name = "String2Int")] 
    class String2Int : SQLiteFunction 
    { 
     public override object Invoke(object[] args) 
     { 
      string s = args[0] as string; 
      return int.Parse(s); 
     } 
    } 
} 
+0

Я все еще получаю синтаксическую ошибку. Я уменьшил свой код до минимального минимума (немного отличается от моего исходного сообщения), но все-таки не пошел. Вы знаете, где работает рабочий образец этого материала? Форумы phxsoftware «молчат» на SQLiteFunction. Спасибо. – Snowy

+0

Привет, я добавил пример, проверьте его. – deerchao

+0

Идеально. Ваш образец разработан. Благодаря! – Snowy