非常简单的SQLite查询不会返回预期的

时间:2010-12-19 06:24:37

标签: c# database sqlite

下面我提供我的数据库模式,当前插入的数据库数据(只有一条记录),以及我正在运行的代码。这是一个非常简单的设置,但它不返回数据库中的一条记录,而是返回任何内容。任何人都知道为什么?我在这里结束了......

表:转包商

列:以(名称类型)格式列在下面。

ID guid, 
BusinessName varchar(50), 
Address varchar(200), 
City varchar(50), 
State varchar(50), 
ZipCode varchar(50), 
Contact varchar(50), 
Phone varchar(50), 
Fax varchar(50), 
Email varchar(200), 
GLOPolicy bit, 
GLOLimit bigint, 
GLOExpiration datetime, 
ALPolicy bit, 
ALLimit bigint, 
ALExpiration datetime, 
WCPolicy bit, 
WCLimit bigint, 
WCExpiration datetime, 
ULPolicy bit, 
ULLimit bigint, 
ULExpiration datetime, 
Notes varchar(15000)

=====

我的数据库中有一条记录,如下所示。

ID "7b143c19-ad66-46ad-b587-db0bee98cf1e"
BusinessName "1"
Address "1"
City "1"
State "1"
ZipCode "1"
Contact NULL
Phone NULL
Fax NULL 
Email NULL
GLOPolicy False (0) 
GLOLimit NULL 
GLOExpiration NULL
ALPolicy False (0)
ALLimit NULL
ALExpiration NULL
WCPolicy False (0)
WCLimit NULL
WCExpiration NULL
ULPolicy False (0) 
ULLimit NULL
ULExpiration NULL
Notes NULL

===== * 我正在尝试以下查询,并且它什么都不返回,它显然应该返回上面显示的唯一记录。 *

String ID = "7b143c19-ad66-46ad-b587-db0bee98cf1e";
DataTable dt = sqliteQuery.selectFromDatabase("*", "WHERE ID = '" + ID + "'");

以上方法的代码是......

    public DataTable selectFromDatabase(String column, String filter)
    {
        string SQL = "SELECT " + column + " FROM SUBCONTRACTOR " + filter;
        SQLiteCommand cmd = new SQLiteCommand(SQL);
        cmd.Connection = connection;
        SQLiteDataAdapter da = new SQLiteDataAdapter(cmd);
        DataSet ds = new DataSet();
        try
        {
            da.Fill(ds);
            DataTable dt = ds.Tables[0];
            return dt;
        }
        catch (Exception e)
        {
            MessageBox.Show(e.ToString());
            return null;
        }
        finally
        {
            cmd.Dispose();
            connection.Close();
        }
    }

1 个答案:

答案 0 :(得分:4)

看起来SqLite本身不支持GUID类型。它由包装器和插件支持,但我认为你在使用类型的方式之间遇到了一些阻抗。您可能最好将其更改为TEXT类型。然后你的谓词就会起作用。

修改

创建一个新的GUID值,以pkey的形式插入到行中:

Guid.NewGuid().ToString();

此外,我发现了the following info

  

GUID不是(!)本机的   SQLite-datatype,但提供了一个插件   罗伯特的包装纸。在连接中   你可以指定的字符串   “BinaryGUID = Yes | No”,是的   默认。当“BinaryGUID = Yes”时   GUID以16个字节存储   存储。现在取决于是否   “SQLite专家”认识到了这一点   数据类型GUID。如果是这样,你应该看看   在它的文档中它是如何的   处理。如果没有,可能就是这样   作为文本处理(可能是无效的   人物数据)。你会有这个   你改变你的时候又麻烦了   SQLite编辑器或包装器。

     

当“BinaryGUID = No”时,GUID是   存储为32-38字节的文本(I   不知道是否减号和   你必须存储大括号{}   测试)。当存储不是很大   问题,我建议使用这个   形成。那么你应该没有问题   使用任何包装器或DB编辑器   你使用并节省了大量的时间   麻烦。

类型本身似乎存在问题。