2009-06-28 17 views
5

Tengo problemas para hacer que las Guids coincidan en SQLite (0.4.8) cuando utilizo los parámetros, cuando uso algo como userGuid = 'guid here' funciona, pero userGuid = @GuidHere no funciona. ¿Alguien tiene alguna idea?Problema de SQLite Problema con las guías

Crear:

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

datos de ejemplo:

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

instrucción de eliminación (de trabajo):

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

instrucción de eliminación (que no funciona):

DELETE FROM Users WHERE UserGuid = @UserGuid 

Aquí es un programa en C# mostrando mi problema:

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:

Bueno, parece que la AddParamWithValue traduce a un representante de 16 bytes de un Guid así que supongo que realmente tienen que traducir todos los GUID a cuerdas primero ... un poco molesto.

Respuesta

6

Intente simplemente pasar la cadena del GUID a su llamada AddWithValue, en lugar del objeto GUID.

Así que en lugar de

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

Haga lo siguiente:

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