Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在数据库中保存图片?_C#_.net_Wpf_Linq - Fatal编程技术网

C# 如何在数据库中保存图片?

C# 如何在数据库中保存图片?,c#,.net,wpf,linq,C#,.net,Wpf,Linq,我正在处理Linq To Sql、WPF,我现在有一个数据库,我需要在数据库中保存一些图片,但我不知道保存图片数据库的正确数据类型(该数据库将同时连接10个用户)。 你能告诉我克服这一步的正确方法吗? 如果我没有错的话,在数据库中保存图片不是一个好主意,但是如果你能给我一个更好的建议,我会应用它。 非常感谢你抽出时间 “美好的问候”将图片存储为blob,包含图像的类中定义的变量可以是byte[]流。或者,您只需将图片的引用存储在数据库中,并将图像存储在文件服务器上 我从未用Linq做过,但我们对

我正在处理Linq To Sql、WPF,我现在有一个数据库,我需要在数据库中保存一些图片,但我不知道保存图片数据库的正确数据类型(该数据库将同时连接10个用户)。 你能告诉我克服这一步的正确方法吗? 如果我没有错的话,在数据库中保存图片不是一个好主意,但是如果你能给我一个更好的建议,我会应用它。 非常感谢你抽出时间


“美好的问候”

将图片存储为blob,包含图像的类中定义的变量可以是byte[]流。或者,您只需将图片的引用存储在数据库中,并将图像存储在文件服务器上

我从未用Linq做过,但我们对图像使用了b64转换,然后是clob数据类型。然后,当您想要查看图像时,将b64反转。

您可以使用“varbinary(MAX)”或“image”列类型。Linq2Sql将自动生成一个使用二进制对象包装图像的类。二进制对象只是一个字节[]的包装器

myObject.Image = new Binary(imageByteArray);

典型地,您将使用VARDIONEX(MAX)或小于MAX -数据库侧,并且在类中使用字节[]类型。

当人们谈论这一点时,有很多激烈的辩论,我想注意,您可能想考虑将该路径存储到数据库中的网络文件夹。 将实际图像存储在数据库中的缺点是,所有这些字节都必须通过sql查询来回发送,如果这些图像很大,则会大大增加数据库的大小。还有上面提到的一些奇怪的事情

无论如何,我不想打开一罐虫子,只是想展示另一种选择

更新:

大概是这样的:

public partial class LinqClass
{
    public string ImagePath { get; set; }

    public System.Drawing.Image Picture
    {
        get
        {
            return System.Drawing.Image.FromFile(ImagePath);
        }
    }
}

其中ImagePath是数据库中保存文件路径的实际列。这没有保存文件的代码(比如file.save(ImagePath)等),但这只是一个开始。

为什么要将其转换为base64,然后将其存储为CLOB?为什么不直接存储为BLOB?安德烈:我不知道dsrekab,但我们有一个必须在多个后端上运行的应用程序。在某些服务器上(Oracle),我们遇到了一些问题,Db和/或驱动程序实际上将二进制零解释为空终止符,并截断了二进制映像(即使我们正在保存到二进制类型字段).编码让我们绕过了客户端安装中出现的许多奇怪的、有时很难纠正的错误。JMarsch-太棒了!我们确实有图像截断问题,但我们没有时间找出原因。有人找到了解决方法,我们不得不继续前进。感谢您解决了一个3年来的谜团!嗨,Jose,谢谢或者你的回答,你能给我一个你的选择的例子吗?谢谢,祝你玩得愉快。确保你在linq-2-sql中将二进制属性标记为延迟加载的属性,这样它只有在被使用时才会被加载。否则,无论你是否需要,每次你从该表中查询一行时,它都会加载二进制数据。