【发布时间】:2013-05-02 22:14:09
【问题描述】:
编辑
删除assetItem 上的对象初始化器似乎解决了我的问题,但为什么呢?
结束编辑
我似乎无法找到一种方法来从我的数据库中读取一个 INT 并将其转换为 emun。
我已经尝试了这两个建议 Cast int to enum in C# 和How to (efficiently) convert (cast?) a SqlDataReader field to its corresponding c# type? 没有成功。
using (var connection = new SqlConnection(_sqlstring))
{
using (var command = new SqlCommand("EXEC GetAllEncodedMedia", connection))
{
try
{
connection.Open();
var reader = command.ExecuteReader();
while (reader.Read())
{
if (reader.HasRows)
{
var assetItem = new MediaServices.EncodedAssets
{
Id = reader.IsDBNull(0) ? 0 : reader.GetInt32(0),
PublishedName = reader.IsDBNull(1) ? null : reader.GetString(1),
PublishUri = reader.IsDBNull(2) ? new Uri("http://www.null.com") : new Uri(reader.GetString(2)),
EncodePreset = reader.IsDBNull(3) ? 0 : (MediaServices.EncodePresetsForSmoothStreaming)reader.GetInt32(3),
AssetId = reader.IsDBNull(4) ? null : reader.GetString(4),
EncoderJobId = reader.IsDBNull(5) ? 0 : reader.GetInt32(5),
//EncoderState = reader.IsDBNull(6) ? 0 : (JobState)reader.GetInt32(6),
//AssetState = reader.IsDBNull(7) ? 0 : (MediaServices.InternalAssetState)reader.GetInt32(7),
GroupId = reader.IsDBNull(8) ? 0 : reader.GetInt32(8),
Published = !reader.IsDBNull(2)
};
listReturn.Add(assetItem);
}
}
}
catch (Exception ex)
{
//error
}
}
}
[DataContract]
public enum EncodePresetsForSmoothStreaming
{
[EnumMember]
[Description("H264 Smooth Streaming 1080p")]
H264SmoothStreaming1080P,
[EnumMember]
[Description("H264 Smooth Streaming 720p")]
H264SmoothStreaming720P,
[EnumMember]
[Description("H264 Smooth Streaming 720p for 3G or 4G")]
H264SmoothStreaming720Pfor3Gor4G,
[EnumMember]
[Description("H264 Smooth Streaming SD 16x9")]
H264SmoothStreamingSd16X9,
[EnumMember]
[Description("H264 Smooth Streaming SD 4x3")]
H264SmoothStreamingSd4X3
}
如何将序数 3 (int) 转换为 EncodePresetsForSmoothStreaming (enum)?
【问题讨论】:
-
我认为你不需要在 while 循环中检查
if (reader.HasRows)因为你已经调用了reader.Read()这意味着你已经读取了一行(这意味着有行)。 -
如果您在结果集第 3 列中有任何
null值,您会得到。 -
我的数据库的内容(当前)没有空值。我检查空值的此代码的先前版本会产生相同的错误
-
整数真的代表一个枚举吗?例如。你有
enum Test { A, B }并且你正在读取的整数值是 9999。 -
通过引用同一个 emum 将值写入数据库,检查数据库,值在愤怒中。但是我发现删除数据库读取和强类型枚举本身会产生相同的转换错误。所以我现在很困惑