如何将二进制转换为字节并在c#中写为文件

时间:2011-04-29 08:31:40

标签: c# .net

我正在尝试从数据库中读取二进制文件,并使用c#在本地磁盘中写入文件。

使用以下代码... 但是这一行存在问题:byte[] fileAsByte = byte.Parse(row["Blob"]);

public static void ReadBlob()
{ 
    int icount = 0;
    string FileName;
    SqlConnection Mycon = new SqlConnection(Con);
    Mycon.Open();
    string queryString = "select * from " + TblName;
    SqlDataAdapter adapter = new SqlDataAdapter(queryString, Mycon);

    DataTable dtBlob = new DataTable();
    adapter.Fill(dtBlob);


    foreach (DataRow row in dtBlob.Rows)
    {
        byte[] fileAsByte = byte.Parse(row["Blob"]);
        FileName = FilePath + TblName + row["BlobId"].ToString() + FileType;

        WriteBlob(fileAsByte, FileName);
    }

    Mycon.Close();
}

public static void WriteBlob(byte[] buff, string fileName)
{
    try
    {
        FileStream fs = new FileStream(fileName, FileMode.Create, FileAccess.ReadWrite);
        BinaryWriter bw = new BinaryWriter(fs);
        bw.Write(buff);
        bw.Close(); 
    }
    catch (Exception ex)
    {
        Console.WriteLine(ex.Message);
    } 
}

2 个答案:

答案 0 :(得分:5)

byte.Parse将尝试解析单个字节。你有没有尝试过施展?

byte[] fileAsByte = (byte[]) row["Blob"];

如果失败,它至少应该显示DataRow实际的类型。希望它是某种类型,可以很容易地转换为byte[]

答案 1 :(得分:0)

如果列的类型为varbinary(max),则可以在SqlDataReader上使用GetSqlBytes或GetSqlBinary。如果列的类型为varchar(max)或nvarchar(max),请在SqlDataReader上使用GetSqlChars。您也可以使用GetBytes {这需要一个数组缓冲区的大小}或GetSqlBytes。

另外,如上所述,对于varbinary(MAX),以下行也应该起作用

byte[] binaryData = (byte[])row["Blob"];

希望这有帮助。