2009-06-28 32 views
5

Tôi đang gặp sự cố khi nhận các hướng dẫn để khớp trong SQLite (0.4.8) khi sử dụng các thông số, khi tôi sử dụng một cái gì đó như userGuid = 'guid here' nó hoạt động, nhưng userGuid = @GuidHere thì không. Ai có ý tưởng gì không?Vấn đề tham số SQLite với các hướng dẫn

Tạo:

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

mẫu dữ liệu:

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

Xóa Tuyên Bố (làm việc):

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

Tuyên Bố Xóa (không làm việc):

DELETE FROM Users WHERE UserGuid = @UserGuid 
.210

Dưới đây là một chương trình C# cho thấy vấn đề của tôi:

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());      
      } 
     } 
    } 
} 

EDIT:

Cũng có vẻ như rằng AddParamWithValue dịch cho người đại diện 16byte của một Guid vì vậy tôi đoán tôi thực sự phải dịch tất cả các guids để dây đầu tiên ... kinda gây phiền nhiễu.

Trả lời

6

Hãy thử chỉ truyền chuỗi GUID cho cuộc gọi AddWithValue của bạn, thay vì đối tượng GUID.

Vì vậy, thay vì

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

Làm điều này:

MyCommand.Parameters.AddWithValue(
    "@UserGuid", "e7bf9773-8231-44af-8d53-e624f0433943"); 
Các vấn đề liên quan