更改数据库中的 BLOB 字段
Alter a BLOB field in Database
我在 sqlite 数据库文件中有一个 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 值(在 blob Id\":\"466ab1fb9be4f77e65ad2b229a15c326 内)并添加到 "ImageInfos" 的路径并将新的 BLOB 放回数据库文件。
一个不太简单的方法是扩展您已经尝试过的内容:
读取 C# 对象中的 json blob(在您的项目中包含 Newtonsoft.Json nuget 包)
var json = "JSON STRING";
var ro = JsonConvert.DeserializeObject<RootObject>(json);
上面会翻译成下面的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; }
}
然后就可以简单的操作你喜欢的字段了
并将其更新回数据库
我在 sqlite 数据库文件中有一个 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 值(在 blob Id\":\"466ab1fb9be4f77e65ad2b229a15c326 内)并添加到 "ImageInfos" 的路径并将新的 BLOB 放回数据库文件。
一个不太简单的方法是扩展您已经尝试过的内容:
读取 C# 对象中的 json blob(在您的项目中包含 Newtonsoft.Json nuget 包)
var json = "JSON STRING"; var ro = JsonConvert.DeserializeObject<RootObject>(json);
上面会翻译成下面的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; } }
然后就可以简单的操作你喜欢的字段了
并将其更新回数据库