2009-06-28 60 views
5

我在使用參數時,在使用類似userGuid = 'guid here'的工作時,使Guids匹配SQLite(0.4.8)時遇到問題,但它不支持userGuid = @GuidHere。有人有主意嗎?SQLite的參數問題

創建:

CREATE TABLE Users 
(
    UserGuid TEXT PRIMARY KEY NOT NULL, 
    FirstName TEXT, 
    LastName TEXT 
) 

樣本數據:

INSERT INTO Users (UserGuid, FirstName, LastName) 
VALUES ('e7bf9773-8231-44af-8d53-e624f0433943', 'Bobby', 'Bobston') 

DELETE語句(工作):

DELETE FROM Users WHERE UserGuid = 'e7bf9773-8231-44af-8d53-e624f0433943' 

DELETE語句(不工作):

DELETE FROM Users WHERE UserGuid = @UserGuid 

這是顯示我的問題一個C#程序:

using System; 
using System.Data.SQLite; 

namespace SQLite_Sample_App 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      Do(); 
      Console.Read(); 
     } 

     static void Do() 
     { 
      using(SQLiteConnection MyConnection = new SQLiteConnection("Data  Source=:memory:;Version=3;New=True")) 
      { 
       MyConnection.Open(); 
       SQLiteCommand MyCommand = MyConnection.CreateCommand(); 
       MyCommand.CommandText = @" 
        CREATE TABLE Users 
        (
         UserGuid TEXT PRIMARY KEY NOT NULL, 
         FirstName TEXT, 
         LastName TEXT 
        ); 

        INSERT INTO Users (UserGuid, FirstName, LastName) 
        VALUES ('e7bf9773-8231-44af-8d53-e624f0433943', 'Bobby', 'Bobston'); 
        "; 
       MyCommand.ExecuteNonQuery(); 

       MyCommand.CommandText = "SELECT Count(*) FROM Users WHERE UserGuid = 'e7bf9773-8231-44af-8d53-e624f0433943'"; 
       Console.WriteLine("Method One: {0}", MyCommand.ExecuteScalar()); 

       MyCommand.Parameters.AddWithValue("@UserGuid", new Guid("e7bf9773-8231-44af-8d53-e624f0433943")); 
       MyCommand.CommandText = "SELECT Count(*) FROM Users WHERE UserGuid = @UserGuid"; 
       Console.WriteLine("Method Two: {0}", MyCommand.ExecuteScalar());      
      } 
     } 
    } 
} 

編輯:

那麼它似乎AddParamWithValue轉化爲GUID的16字節代表,所以我想我真的要轉換所有的GUID先串起...有點煩人。

回答

6

嘗試將GUID的字符串傳遞給您的AddWithValue調用,而不是GUID對象。

所以不是

MyCommand.Parameters.AddWithValue(
    "@UserGuid", new Guid("e7bf9773-8231-44af-8d53-e624f0433943")); 

這樣做:

MyCommand.Parameters.AddWithValue(
    "@UserGuid", "e7bf9773-8231-44af-8d53-e624f0433943");