Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.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# 如何在数据库中读取和写入PNG文件?_C#_Sql Server - Fatal编程技术网

C# 如何在数据库中读取和写入PNG文件?

C# 如何在数据库中读取和写入PNG文件?,c#,sql-server,C#,Sql Server,我有一些小的用户配置文件图像(5kB),我想存储在数据库中。但我不确定数据类型。varbinary(6000)?og可能是二进制(6000)?可能使用(最大值) 我该如何书写和阅读图像呢?我可以简单地从数组中使用INSERT和bytearray吗?您可以使用blob(二进制大对象)将图像存储在数据库中,请参见: BLOB是一个通用术语,指文本、ntext和图像数据类型,通常包含文档和图片 编辑:如Marc Gravell所述: “文本、ntext和图像数据类型”:它们都已过时多年;“varcha

我有一些小的用户配置文件图像(5kB),我想存储在数据库中。但我不确定数据类型。varbinary(6000)?og可能是二进制(6000)?可能使用(最大值)


我该如何书写和阅读图像呢?我可以简单地从数组中使用INSERT和bytearray吗?

您可以使用
blob
(二进制大对象)将图像存储在数据库中,请参见:

BLOB是一个通用术语,指文本、ntext和图像数据类型,通常包含文档和图片

编辑:如Marc Gravell所述:

“文本、ntext和图像数据类型”:它们都已过时多年;“varchar(max)、nvarchar(max)和varbinary(max)数据类型”将是非常可取的

例如:

  byte[] image = GetImage(photoFilePath);

  using (SqlConnection connection = new SqlConnection(connectionString)){

      SqlCommand command = new SqlCommand("INSERT INTO Employees (Image) " +
        "Values(@Image)", connection); 

      command.Parameters.Add("@Image", SqlDbType.VarBinary, image.Length).Value = image;

      connection.Open();
      command.ExecuteNonQuery();
  }
以及
GetImage()
方法:

public static byte[] GetImage(string filePath)
{
    FileStream stream = new FileStream(filePath, FileMode.Open, FileAccess.Read);
    BinaryReader reader = new BinaryReader(stream);

    byte[] image = reader.ReadBytes((int)stream.Length);

    reader.Close();
    stream.Close();

    return image;
}

您可以使用数据类型
image
()

是的,您可以简单地使用
insert
添加二进制数据。 以下是示例:

插入二进制文件(二进制文件id、二进制数据、文件名)
值(@binary\u file\u id、@binary\u data、@file\u name)


其中
@binary\u data
是字节数组

您最好使用
varbinary(max)
。如果您知道大小要小得多,那么有时限制它是有用的——这允许行内数据优化;然而,对于5公里的图像,这将是没有用的;因此,
(max)
类型将更加方便


是的,您可以使用常规的
insert
select
byte[]
来设置这种大小。有一种“在循环中追加”/“在循环中读取”的方法可以用于处理大型文件(数兆字节或千兆字节),但在这里您不需要它。

@Jason94它解决了您的问题吗?您能将答案标记为已解决吗?再次提到“文本、ntext和图像数据类型”:它们都已过时多年;“varchar(max)、nvarchar(max)和varbinary(max)数据类型”将非常复杂preferable@MarcGravell谢谢你的评论!我将编辑我的答案<代码>图像已弃用
varbinary(max)
是许多公司的首选years@MarcGravell好啊谢谢