Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/317.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.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_Sql Server - Fatal编程技术网

C# 如何检查字段是否为图像字段

C# 如何检查字段是否为图像字段,c#,.net,sql-server,C#,.net,Sql Server,对一些人来说,这似乎是一个简单的问题,但我正在努力解决它 我正在尝试使用SQLDataReader.GetFieldType检查某个字段是否是图像字段。假设结果集的第一个字段是图像字段,如果: reader.GetFieldType(0).ToString; 我得到了System.Byte[],但这是检查它的正确方法吗?我真的不喜欢: if (reader.GetFieldType(0).ToString="System.Byte[]") 有更好的办法吗 谢谢 AJ最好使用该方法,而不是查看

对一些人来说,这似乎是一个简单的问题,但我正在努力解决它

我正在尝试使用SQLDataReader.GetFieldType检查某个字段是否是图像字段。假设结果集的第一个字段是图像字段,如果:

reader.GetFieldType(0).ToString;
我得到了
System.Byte[]
,但这是检查它的正确方法吗?我真的不喜欢:

if (reader.GetFieldType(0).ToString="System.Byte[]")
有更好的办法吗

谢谢


AJ

最好使用该方法,而不是查看类型名称本身

Type fieldType = reader.GetFieldType(0);
bool isImageField = typeof(byte[]).IsAssignableFrom(fieldType);
这为您提供了一些编译时安全措施


注意:这实际上并不保证字段将包含图像-任何形式的二进制数据都可以存储在
image
/
binary
/
varbinary
字段中,因此查看它是否真的是图像的唯一方法是读取值并尝试将其作为一个值加载。但是您可以使用它来检查字段是否为二进制字段。

您可能需要检查第一个字节,以查看它们是否构成图像标题。否则,您可能会处理音频文件,例如。因此字节数组不一定代表图像。

您可以将其缩短一点:

if(reader.GetFieldType(0) == typeof(byte[]));
不幸的是,SQL Server中没有从映像字段直接映射到.NET CLR类型…这就是为什么会得到字节数组

您可能需要添加进一步的检查,以确保返回的字节数组实际上是一个图像(字节数组也用于
image
binary
varbinary
rowversion
列)

您可以在以下位置检查类型映射:


另一种方法是使用该方法。这将返回一个包含resultset架构的datatable,并使db中的实际数据类型可用-例如,返回的架构表的DataTypeName列将是实际的SQL Server数据类型,如varchar,ProviderSpecificDataType列将是System.Data.SqlType

e、 g


+1用于使用typeof(byte[])来避免硬编码的类型名称。下面的一些注释是混淆的。请确认这是关于检测
图像
数据类型,而不是图像数据。
DataTable dataSchema = reader.GetSchemaTable();
// dataSchema.Rows[0]["DataTypeName"] would return the sql server 
// data type name for the first column in the resultset.