【问题标题】:SQLite net PCL - Simple selectSQLite net PCL - 简单选择
【发布时间】:2026-01-02 14:55:01
【问题描述】:

我使用 Windows 应用程序中的 SQLite,现在我正在 Xamarin 中开发一个便携式应用程序,所以我使用插件 sqlite net pcl,但我很难理解它是如何工作的。

我有一个由以下创建的表:

public class Config
    {
        public string IP { get; set; }
        [SQLite.Net.Attributes.Default(true, "Client 2")]
        public string ID { get; set; }
    }

并创建表:

db.CreateTable<Model.Config>();

问题:现在我想选择 ID 列中的值并执行以下操作:

List<string> hhid = db.Query<string>("select ID from Config",null);

我得到了这个例外:"Object reference not set to an instance of an object"

如何通过简单的选择来查找该字段?

感谢任何提示

【问题讨论】:

  • List&lt;string&gt; hhid = db.Query&lt;string&gt;("select id from Config",null); 字段名称是 ID 而不是 id 更改 Select 以匹配字段名称
  • @MethodMan 我试过了,结果一样。我现在更新了问题
  • db 是否正确初始化?
  • 您是否尝试过 LINQ 语法而不是 .Query ?即github.com/oysteinkrog/SQLite.Net-PCLconn.Table&lt;Config&gt;();
  • @nachogsiri 你解决了吗?

标签: c# sqlite xamarin portable-class-library


【解决方案1】:

希望这对代替我的人有用...

括号()之间是表名:

db.Query<TableName>("select * from ....");

一些对我有用的例子:

简单选择:

var list = db.Query<MyTableName>("select * from MyTableName");

有限制地选择:

var list = db.Query<MyTableName>("select * from MyTableName where lastname=? and firstname=?", lastnameValue, firstNameValue);

【讨论】:

    【解决方案2】:

    如果您有表名的自定义映射,则接受的答案并没有真正的帮助。 可以在运行时访问类型映射时找到“Sql”表名。

    这里是一个扩展方法

    public static class NativeConnectionExtension
    {
        public static List<T> SelectAllFrom<T>(this SQLiteConnection cnn) where T : new()
        {
            var mapping = cnn.GetMapping<T>();
            var result = cnn.Query<T>(String.Format("select * from {0};", mapping.TableName));
            return result;
        }
    }
    

    【讨论】: