Как преобразовать двоичный файл в байт и записать в виде файла в C # - PullRequest
4 голосов
/ 29 апреля 2011

Я пытаюсь прочитать двоичный файл из базы данных и записать файл на локальный диск, используя 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 ]

5 голосов
/ 29 апреля 2011

byte.Parse попытается проанализировать одиночный байт. Вы пробовали только кастинг?

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

Если это не удастся, он должен хотя бы показать вам, какой тип на самом деле в DataRow. Надеюсь, это какой-то тип, который достаточно легко конвертируется в byte[].

0 голосов
/ 29 апреля 2011

Если ваш столбец имеет тип varbinary (max), вы можете использовать GetSqlBytes или GetSqlBinary в SqlDataReader. Если ваш столбец имеет тип varchar (max) или nvarchar (max), используйте GetSqlChars для SqlDataReader. Вы также можете использовать GetBytes {это занимает размер буфера массива} или GetSqlBytes.

Также, как предложено выше, для varbinary (MAX) также должна работать следующая строка

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

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...