在SQL Server数据库中显示WPF中的文件

时间:2014-07-26 14:55:59

标签: c# sql-server wpf file

我有疑问,我不知道是否有可能。首先,我使用以下代码在byte[](C#)到varbinary的SQL Server数据库中保存了一个文件:

OpenFileDialog fileDialog = new OpenFileDialog();
fileDialog.Title = " Seleccione la foto del Usuario";
fileDialog.ShowDialog();

if (fileDialog.FileName != null)
{
   ruta = fileDialog.FileName;
   lblnomArchivo.Content = new BitmapImage(new Uri(ruta));
   //MessageBox.Show(path);
}

public byte[] ConvertToByteArray(string path)
{
    byte[] ImageByte = null;

    try
    {
        FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read);
        //BinaryReader br = new BinaryReader(fs);
        //ImageByte = br.ReadBytes((int)fs.Length);

        Byte[] data = new byte[fs.Length];
        fs.Read(data, 0, Convert.ToInt32(fs.Length));
        ImageByte = data;
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }

    return ImageByte;
}

我只想在一些WPF元素中检索此文件,在datagrid的单元格中,例如,我可以获取文件的名称然后打开它....

文件应该是任何文件格式,而不仅仅是图像格式

1 个答案:

答案 0 :(得分:1)

如果您在编写应用程序时不知道文件的类型,可以使用的回退方法是将文件传递给操作系统,并让操作系统选择合适的应用程序来打开文件。

首先从数据库中获取并保存(包括正确的扩展名),然后在应用程序中将文件传递给操作系统:

System.Diagnostics.Process.Start(filePathNameAndExtension);

在此之前,您可以检查文件名的扩展名:

var extension = Path.GetExtension(filePathNameAndExtension).ToLower();

select(extension)
{
    case ".jpg":
    case ".png":
    case ".jpeg":
        type = Type.Image;
        break;
    case ".txt":
        type = Type.Text;
        break;
    default:
        type = Type.Unknown;
        break;
}

select(type)
{
    case Type.Unknown:
        System.Diagnostics.Process.Start(filePathNameAndExtension);
        break;
    case Type.Image:
        myImage = new Bitmap(filePathNameAndExtension);
        break;
    .....
}