2
A
回答
1
回发我的解决方法:
public static string ParseValue(SqlDbType psdtParameter, string pstrValue, string pstrDateFormat = null)
{
object objReturn = new object();
if (pstrValue != "")
{
switch (psdtParameter.ToString())
{
case "BigInt":
objReturn = TypeDescriptor.GetConverter(typeof(Int64)).ConvertFromString(pstrValue);
break;
case "Bit":
objReturn = TypeDescriptor.GetConverter(typeof(Boolean)).ConvertFromString(pstrValue);
break;
case "NText":
case "NVarChar":
case "VarChar":
case "NChar":
case "Text":
case "Char":
objReturn = TypeDescriptor.GetConverter(typeof(String)).ConvertFromString(pstrValue);
break;
case "SmallDateTime":
case "DateTime":
objReturn = DateTime.ParseExact(pstrValue, pstrDateFormat, CultureInfo.InvariantCulture);
//TypeDescriptor.GetConverter(typeof(DateTime)).ConvertFromString(pstrValue);
break;
case "Money":
case "SmallMoney":
case "Decimal":
objReturn = TypeDescriptor.GetConverter(typeof(Decimal)).ConvertFromString(null, CultureInfo.InvariantCulture, pstrValue);
break;
case "Float":
objReturn = TypeDescriptor.GetConverter(typeof(Double)).ConvertFromString(pstrValue);
break;
case "Binary":
case "VarBinary":
case "Timestamp":
case "Image":
objReturn = TypeDescriptor.GetConverter(typeof(Byte[])).ConvertFromString(pstrValue);
break;
case "Int":
objReturn = TypeDescriptor.GetConverter(typeof(Int32)).ConvertFromString(pstrValue);
break;
case "Real":
objReturn = TypeDescriptor.GetConverter(typeof(Single)).ConvertFromString(pstrValue);
break;
case "SmallInt":
objReturn = TypeDescriptor.GetConverter(typeof(Int16)).ConvertFromString(pstrValue);
break;
case "TinyInt":
objReturn = TypeDescriptor.GetConverter(typeof(Byte)).ConvertFromString(pstrValue);
break;
}
return objReturn.ToString();
}
else
{
return null;
}
}
韩国社交协会!
+0
很酷,但我不明白为什么你必须将psdtParameter转换为字符串... – Antonio
0
遗憾的是没有。 SqlDbType是一个枚举,因此(SqlDbType.Int)
实际上归结为一个整数值,而不是一个类型。我能想到的要做到这一点的唯一方法是某种switch语句:
switch (SqlDbType dbType)
{
case SqlDbType.Int:
int value = Int32.Parse(dtbDataTable.Rows[0]["Id"]);
//Do stuff with this value
//repeat for other types
}
0
我想这是很难做的,它不是最可读的方式。我通过扩展方法处理这个问题,以帮助TinyInt,SmallInt和可空的值。例如: -
using (var dr = new SafeDataReader(cmd.ExecuteReader()) {
while (dr.Read()) {
int? id = dr.GetNullableIntFromSqlTinyInt(0);
// Other stuff like that to handle type conversions
}
}
SafeDataReader是里昂证券的业务对象框架的一部分,但你可以实现自己的DataReader,如果你想。它更清晰易读,并将所有解析逻辑封装在扩展方法的幕后。
相关问题
- 1. C到C#皈依
- 2. 列表皈依C#LINQ
- 3. 皈依图像
- 4. MATLAB皈依
- 5. SQL组,皈依
- 6. 皈依笨
- 7. 皈依法ASP.NET
- 8. 皈依到ITCL
- 9. utf8_general_ci皈依
- 10. 问题的解析字符串皈依到Java int的
- 11. SGML到XML皈依
- 12. 皈依到SQLite的
- 13. PHP数组皈依
- 14. QDomDocument到QDomElement皈依
- 15. SQL到LINQ皈依
- 16. 字符串皈依
- 17. glibc的检测皈依型C++
- 18. 孩子父母一般皈依在C#
- 19. PHP数组皈依为JSON字符串皈依
- 20. Mysql的数组JSON皈依
- 21. 十进制到ASCII皈依
- 22. SDL方法,参数皈依
- 23. JSON到java对象皈依
- 24. NSKeyedUnarchiver unarchiveObjectWithData皈依问题
- 25. SqlDbType枚举映射 - C#
- 26. 皈依产生空字符串
- 27. 阵列串皈依错误在PHP
- 28. 海量链接皈依从302到301
- 29. 皈依从SQL Server 2005到Oracle 9i
- 30. LINQ的投皈依的XElement错误
'dtbDataTable.Rows [0] [“Id”]'的值是多少? – manji
“Id”实际上是数据类型标识符,还是试图找出列ID的数据? – vcsjones
你能解释为什么你想输出[“Id”]字段到SqlDbType类型的枚举? 如果这已经是一个整数,你不想做Int.Parse(dtbDataTable.Rows [0] [“Id”] .ToString())或简单的(int)dtbDataTable.Rows [0] [“Id”] ? – saamorim