2015-10-19 58 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

相關問題