我有一个类型为Image
的列的sqlserver表我正在使用此代码从我的数据库中恢复它。
public static byte[] ObtenerArchivo(string IdArchivo,bool GuardarEnDisco)
{
byte[] archivo = null;
MyContext db = new MyContext();
Double Versiond = 1010;
archivo = db.Versiones.Where(x => x.IntIdArchivo == IdArchivo && x.IntIdVersion == Versiond).Select(x => x.BinFisico).First();
return archivo;
}
现在要使mi文件可读,我需要转换它。此应用程序继承自Visual FoxPro,从我的数据库中检索文件后必须使用此函数转换它
**VFP Sintax
STRCONV(lcImage, 6)
In VFP help it says:
Converts character expressions between single-byte, double-byte, UNICODE, and locale-specific representations.
6 表示:
6 Converts UNICODE (wide characters) to double-byte characters.
现在我的问题是如何在c#中进行相同的转换?
编辑1:如果我不能像@Hans Passant那样说话。并且知道我已经在该SQL Image字段上存储了文本文件,图像,base 64编码文件。如何存储,检索和更新这些文件以使用C#进行管理?
答案 0 :(得分:0)
@HansPassant关于他的apreciation是好的,但在我的情况下采取一些特殊条件是可以将字符串从doublé字节转换为单字节。
1- VFP将文本文件翻译为双字节,这意味着我的原始文件是仅文本单字节格式化。
2-要解码我的文件,只需删除由vfp添加的字节。
以下是代码:
public async Task<string> GetStringAsync(string IdArchivo)
{
string FinalData = await Task.Factory.StartNew(() =>
{
string NData = string.Empty;
Byte[] BData = GetBinaryData(IdArchivo);
string SData = Encoding.UTF8.GetString(BData);
for (int i = 0; i < SData.Length; i++)
{
if (i > 0)
i++;
if (i <= SData.Length - 1)
NData += SData[i];
}
return NData;
});
return FinalData;
}
public Byte[] GetBinaryData()
{
// Just retrieve the file from my database
}
此过程删除数组中的所有奇数字节,并按预期返回我的字符串。是的,它不是那么快,但至少解决了我的问题。