2015-10-19 90 views
0

我在sqlite数据库文件中有一个BLOB列,我想改变这个字段给它更多的信息。改变数据库中的BLOB字段

的BLOB包含这样的文字:

"{\"Number\":\"35\",\"ChannelType\":\"TV\",\"ServiceName\":\"DVBLink\",\"ImageInfos\":[],\"IsInMixedFolder\":false,\"Name\":\"13th Street HD\",\"Id\":\"466ab1fb9be4f77e65ad2b229a15c326\",\"DateCreated\":\"2015-09-14T12:55:51.4081476Z\",\"DateModified\":\"0001-01-01T00:00:00.0000000Z\",\"DateLastSaved\":\"2015-10-17T13:34:37.4214116Z\",\"LockedFields\":[],\"ParentId\":\"00000000000000000000000000000000\",\"Studios\":[],\"Genres\":[],\"ProviderIds\":{\"ProviderExternalId\":\"13250000\"}}"

下面的代码来获取这些信息

 private void button1_Click(object sender, EventArgs e) 
    { 
     try { 
      SQLiteConnection con = new SQLiteConnection("Data Source=D:\\2work\\VisualStudio\\Projects\\MapTVIcons\\library.db"); 

      con.Open(); 

      SQLiteCommand cmd = new SQLiteCommand(); 

      cmd.Connection = con; 
      cmd.CommandText = "SELECT guid,data FROM TypedBaseItems where type = 'MediaBrowser.Controller.LiveTv.LiveTvChannel'"; 
      //cmd.CommandText = "SELECT * FROM TypedBaseItems"; 

      DataSet ds = new DataSet(); 
      SQLiteDataAdapter da = new SQLiteDataAdapter(cmd); 
      ds.Tables.Add("TypedBaseItems"); 
      da.Fill(ds); 
      //dataGridView1.DataSource = ds.Tables[1]; 
      foreach (DataRow dr in ds.Tables[1].Rows) 
      { 


       byte[] array = (byte[])dr["data"]; 
       var str = System.Text.Encoding.Default.GetString(array); 
      } 
     } 
     catch(Exception ex) 
     { 
      MessageBox.Show(ex.ToString()); 
     } 
    } 
} 

我想要做的是读出的ID值(斑点标识\“里面:\ “466ab1fb9be4f77e65ad2b229a15c326)并添加一个路径到”ImageInfos“,并将新的BLOB放回数据库文件。

+1

使用update语句即可。 –

+0

你需要能够唯一标识你想改变的每一行 - 可能是通过主键,所以修改查询来获得id字段和数据 - 并使用SQL UPDATE命令,如@TechieBee所述。 – PaulF

+0

对不起,我的错误理解我的意思是ID内的ID:“\”466ab1fb9be4f77e65ad2b229a15c326 \ – user1073472

回答

1

一个这样做的不那么短的方法是什么您已经尝试延长:

  1. 在C#对象

    读取JSON BLOB(包括Newtonsoft.Json NuGet包在您的项目)

    var json = "JSON STRING"; 
    
        var ro = JsonConvert.DeserializeObject<RootObject>(json); 
    
  2. 上面会转化为下面的C#类

    public class ProviderIds 
    { 
        public string ProviderExternalId { get; set; } 
    } 
    
    
    public class RootObject 
    { 
    public string Number { get; set; } 
    
    public string ChannelType { get; set; } 
    public string ServiceName { get; set; } 
    public List<object> ImageInfos { get; set; } 
    public bool IsInMixedFolder { get; set; } 
    public string Name { get; set; } 
    public string Id { get; set; } 
    public string DateCreated { get; set; } 
    public string DateModified { get; set; } 
    public string DateLastSaved { get; set; } 
    public List<object> LockedFields { get; set; } 
    public string ParentId { get; set; } 
    public List<object> Studios { get; set; } 
    public List<object> Genres { get; set; } 
    public ProviderIds ProviderIds { get; set; } 
    } 
    
  3. 然后你可以简单地操纵你喜欢的领域。

  4. 并更新到数据库

+1

..并将其写回数据库 –

+0

@HansKesting添加了第4步,谢谢:) – Yahya

+0

到目前为止,我创建了两个类ProviderID和RootObject,类似于第2点。并调用这个'byte [] array =(byte [])dr [“data”]; string str = System.Text.Encoding.Default.GetString(array); JavaScriptSerializer json_serializer = new JavaScriptSerializer(); RootObject retObject =(RootObject)json_serializer.DeserializeObject(str);' – user1073472