如何检索xamarin中本地数据库的字符串值?

问题描述:

表结构如何检索xamarin中本地数据库的字符串值?

[Table(TableConst.TABLE_BRANDING)] 
public class BrandingInfoModel 
{ 
    public int id { get; set; } 
    public string title { get; set; } 
    public string primary_color { get; set; } 
    public string secondary_color { get; set; } 
    public string tertiary_color { get; set; } 
} 

方法,从数据库

public string GetColorResourceFromDatabase(string key) 
    { 
     try 
     { 

      string value = mSqlConnection.Query<string>("SELECT " + key + " FROM data").ToString(); 
      return value; 

     } 
     catch (Exception e) 
     { 
      string error = e.Message; 
      return null; 
     } 

    } 

我写了返回基于本地数据库中的值来选择查询的方法来获取资源。但它返回null。

+0

分享你的'数据'表结构 –

+0

如果KEY是你想要选择的项目的PK,那么你的SQL语法是不正确的。 – Jason

+0

Query方法的通用参数指定要为每行创建的对象的类型(您告诉它使用字符串)。它可以是你的表类或其公共属性**匹配查询返回的列的任何其他类。您不能将列值强制为字符串对象,因为它没有公共属性(至少不使用Query方法)。另请注意,您正在运行的查询有可能返回多行。我不知道你为什么试图在行列表上调用ToString。 –

我已经试过这样

//Get resource from Brading table 
    public BrandingInfoModel GetResourceFromDatabase(string key) 
    { 
     try 
     { 
      //string value = (from i in mSqlConnection.Table<BrandingInfoModel>() select i.menu_text_color).ToString(); 

      var queryResult = mSqlConnection.Query<BrandingInfoModel>("SELECT " + key + " FROM " + TableConst.TABLE_BRANDING).FirstOrDefault(); 
      return queryResult; 

     } 
     catch (Exception e) 
     { 
      string error = e.Message; 
      return null; 
     } 

    } 

它返回所需的输出。

而不是使用SQL查询来执行选择。请考虑使用Linq查询来达到相同的结果。

例如,如果你想选择了行并取得编号的primary_color:

var rowData = mSqlConnection.Table<BrandingInfoModel>() 
          .FirstOrDefault(i => i.id == 123); 
if (rowData != null) 
{ 
    return rowData.primary_color; 
}