SQLite不返回它应该返回的内容

时间:2012-09-12 13:53:30

标签: c# sqlite ado.net

一切都很好,除了一件事。当我尝试拉出分数最高的用户名时,程序失败。

我得到的结果是0而不是le_user

这是代码行为奇怪的部分:

string query = "SELECT * FROM \"Highscore_List\" ORDER BY Highscore_List.score DESC LIMIT 1";
DataTable  recipe = db.GetDataTable(query);
foreach (DataRow r in recipe.Rows)
{
    string old_user = r["user_name"].ToString();
    int oude_topscore = Convert.ToInt32(r["score"]);
}

分数是正确的,只是用户名不是。当我离开这部分查询时

ORDER BY Highscore_List.score DESC LIMIT 1

结果仍然相同。所以这不是问题。

那么我做错了什么?

修改

以下是它的SQL转储:

-- ----------------------------
-- Table structure for "main"."Highscore_List"
-- ----------------------------
DROP TABLE "main"."Highscore_List";
CREATE TABLE "Highscore_List" (
"id"  INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
"score"  INTEGER NOT NULL,
"user_name"  INTEGER NOT NULL
);

-- ----------------------------
-- Records of Highscore_List
-- ----------------------------
INSERT INTO "main"."Highscore_List" VALUES (1, 1, 'hui');
INSERT INTO "main"."Highscore_List" VALUES (2, 2, 'Onbekend');
INSERT INTO "main"."Highscore_List" VALUES (3, 3, 'onbekend_tt');
INSERT INTO "main"."Highscore_List" VALUES (4, 2, 'onbekenddd');
INSERT INTO "main"."Highscore_List" VALUES (5, 6, 'le_user');
INSERT INTO "main"."Highscore_List" VALUES (6, 0, 'Onbekend');

1 个答案:

答案 0 :(得分:1)

您已将列“user_name”创建为整数列。

实际上,SQLite可以将文本值放入整数列并再次将其作为文本读出。但是,我不熟悉SQLite的ADO.NET接口。它似乎将“user_name”值读出为整数,从而产生0值。我看到两种解决问题的方法:

  1. 将“user_name”列创建为TEXT
  2. 找一种方法告诉ADO.NET-SQLite-bridge它应该将查询结果的“user_name”列中的值解释为TEXT