gpt4 book ai didi

c# - 将 mysql blob 导出到 xml 然后导入回来在 c# 中不会得到相同的结果

转载 作者:行者123 更新时间:2023-11-29 00:58:28 27 4
gpt4 key购买 nike

我在 mysql 数据库(在我的桌面上)中有一些照片(不大,只有 8kb)。字段类型是 blob。实际上我想将表格导出到 xml 文件,然后将其上传到我的数据库网站。但它失败了。我尝试通过将表导出到 xml 文件然后将其导入回另一个表(表的结构相同)来模仿它。我可以做到,但我没有得到相同的照片(只有一些编码文本)。下面是一些代码:

将表导出到 xml:

FileStream fs = new FileStream(filename,FileMode.Create,FileAccess.Write,FileShare.None);
StreamWriter sw = new StreamWriter(fs,Encoding.ASCII);
ds.WriteXml(sw); //write the xml from the dataset ds

将 xml 导入数据集:

FileStream fs = new FileStream(filename,FileMode.Open);
DataSet ds = new DataSet();
ds.ReadXml(fs);

将数据集写入另一个表:

   ...
int count = ds.Tables[0].Rows.Count;
for(int i=0;i<count;i++)
{
DataRow myDR = ds.Tables[0].Rows[i];
...
byte[] myphoto = null;
if(myDR["myphoto"].ToString().Length > 0)
{
myphoto = Encoding.ASCII.GetBytes(myDR["myphoto"].ToString().ToCharArray());
}
//insert the data to the mysql table
...
}
...

为什么我在另一张 table 上看不到相同的照片?
抱歉我的英语不好。

最佳答案

看看这个:

myphoto = Encoding.ASCII.GetBytes(myDR["myphoto"].ToString().ToCharArray());

您将任意二进制数据视为编码文本;那不能工作。 Encoding 旨在将文本数据转换为二进制(给定文本格式,即编码),并将二进制(给定文本格式)转换回文本;它不能将任意二进制文件(不是预期格式)视为文本。作为一个简单的例子,A​​SCII 只使用每个八位字节的 7 位;任何带有 MSB 集的八位字节都保证在这个周期的某个时刻被破坏。

如果要将二进制数据表示为字符串,请使用 base-64:

string s = Convert.ToBase64String(blob);

转换回来:

byte[] blob = Convert.FromBase64String(s);

关于c# - 将 mysql blob 导出到 xml 然后导入回来在 c# 中不会得到相同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4918624/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com