回答
假设这个表:
CREATE TABLE TestTable
(
Col1 int,
Col2 dec(9,2),
Col3 money
)
有了这些值:
INSERT INTO TestTable VALUES (1, 2.5, 3.45)
您可以使用下面的代码来获取类型为.NET类型:
Dim DSN = "SERVER=XYZ;UID=XYZ;PWD=XYZ;DATABASE=XYZ"
Using Con As New SqlConnection(DSN)
Con.Open()
Using Com As New SqlCommand("SELECT * FROM TestTable", Con)
Com.CommandType = CommandType.Text
Using RDR = Com.ExecuteReader()
If RDR.Read Then
Trace.WriteLine(RDR.GetProviderSpecificFieldType(0)) 'Returns System.Data.SqlTypes.SqlInt32
Trace.WriteLine(RDR.GetProviderSpecificFieldType(1)) 'Returns System.Data.SqlTypes.SqlDecimal
Trace.WriteLine(RDR.GetProviderSpecificFieldType(2)) 'Returns System.Data.SqlTypes.SqlMoney
End If
End Using
End Using
Con.Close()
End Using
你可以也可以使用它来获取该类型的SQL文本版本:
Dim DSN = "SERVER=XYZ;UID=XYZ;PWD=XYZ;DATABASE=XYZ"
Using Con As New SqlConnection(DSN)
Con.Open()
Using Com As New SqlCommand("SELECT * FROM TestTable", Con)
Com.CommandType = CommandType.Text
Using RDR = Com.ExecuteReader()
If RDR.Read Then
Using SC = RDR.GetSchemaTable()
Trace.WriteLine(SC.Rows(0).Item("DataTypeName")) 'Returns int
Trace.WriteLine(SC.Rows(1).Item("DataTypeName")) 'Returns decimal
Trace.WriteLine(SC.Rows(2).Item("DataTypeName")) 'Returns money
End Using
End If
End Using
End Using
Con.Close()
End Using
编辑
这里是如何做到这类型的比较与格式化的东西助手功能一起。输出再一次假定上面的SQL。
Dim DSN = "SERVER=XYZ;UID=XYZ;PWD=XYZ;DATABASE=XYZ"
Using Con As New SqlConnection(DSN)
Con.Open()
Using Com As New SqlCommand("SELECT * FROM TestTable", Con)
Com.CommandType = CommandType.Text
Using RDR = Com.ExecuteReader()
If RDR.Read Then
Trace.WriteLine(FormatNumber(RDR.Item(0), RDR.GetProviderSpecificFieldType(0))) '1
Trace.WriteLine(FormatNumber(RDR.Item(1), RDR.GetProviderSpecificFieldType(1))) '2.50
Trace.WriteLine(FormatNumber(RDR.Item(2), RDR.GetProviderSpecificFieldType(2))) '$3.45
End If
End Using
End Using
Con.Close()
End Using
Private Shared Function FormatNumber(ByVal number As Object, ByVal type As Type) As String
If number Is Nothing Then Throw New ArgumentNullException("number")
If type Is Nothing Then Throw New ArgumentNullException("type")
If type.Equals(GetType(System.Data.SqlTypes.SqlInt32)) Then
Return Integer.Parse(number)
ElseIf type.Equals(GetType(System.Data.SqlTypes.SqlDecimal)) Then
Return Decimal.Parse(number.ToString()).ToString("N")
ElseIf type.Equals(GetType(System.Data.SqlTypes.SqlMoney)) Then
Return Decimal.Parse(number.ToString()).ToString("C")
End If
Throw New ArgumentOutOfRangeException(String.Format("Unknown type specified : " & type.ToString()))
End Function
了解详情!!! 但是我无法在vb.net中使用它。 我试过这个: 如果reader.GetProviderSpecificFieldType(i)= System.Data.SqlTypes.SqlMoney 我得到一个错误,说SqlMoney是一个Type并且不能在表达式中使用。 GetSchemaTable由于intelisence没有选择它,所以我在上班时遇到了更多麻烦。 但是当我在调试器中尝试它时,像: typeof sc.rows(0)。Item(0)是int我得到了错误,并且我得到了false,无论我尝试将它与哪种类型进行比较。 (它是一个整数)。 – Alex 2010-02-03 04:19:34
太棒了!谢谢!! (Integer.Parse(CStr(number))) – Alex 2010-02-03 16:56:54
不好意思,应该是Integer.Parse(number.ToString())。ToString(),看起来像我当时有Option String Off。 – 2010-02-03 17:05:52
只能访问基础值而不访问数据库的结构,因此无法明确地告诉数据类型是什么类型。原因是Money,Real和Int值的领域存在重叠。例如,数字4可能既是真实的,也可能是金钱。
您能否就这个问题给我们更多的背景?你是否试图将原始数据库值转换为VB.Net中的Int样式值?你能告诉我们一些代码吗?
我想格式化货币,并保持原样,真正的数字四舍五入到2个小数位。 的代码是这样的:(所有的值都为1个结果进来) 读者= cmd.ExecuteReader() reader.Read() 如果reader.HasRows然后 Me.DataGridView1.Rows.Clear() 对于i.Rows(Me.DataGridView1.RowCount - 1).Cells(0).Value = reader.GetName(i).ToString Me.DataGridView1.Rows(Me.DataGridView1.RowCount - 1).Cells(1)。价值= reader.Item(ⅰ)的ToString 接着 Me.DataGridView1.Refresh() 结束如果 – Alex 2010-02-02 18:38:19
遗憾的代码,我发布它可读和网站掉落所有空间,等 – Alex 2010-02-02 18:39:00
@ bochur1:发布它在你的问题。 – jason 2010-02-02 18:41:14
- 1. VB.net查询结果
- 2. 在数据库查询结果集中的字段前添加文本
- 3. javascript - 在结果集中访问数据类型varchar(max)的字段
- 4. SpagoBI:使用查询数据集结果的脚本数据集
- 5. MySQL根据结果集确定列类型
- 6. postgresql查询上的大型结果集
- 7. PHP/MySQL - 如何确定给定查询结果中的字段名称?
- 8. vb.net循环查询结果
- 9. 从MySQL查询结果中检索字段元数据
- 10. 要在标签VB.net中显示的数据库查询结果
- 11. 如何将子查询结果字段集中到父查询中?
- 12. 映射到Java数据类型的嵌套查询结果
- 13. 如何确定SQL结果的数据类型?
- 14. Django模型查询结果不准确
- 15. 混合类型的Solr查询结果
- 16. 数据集设计者如何确定标量查询的返回类型?
- 17. 如何显示包含特定数据的字段的mysql查询结果?
- 18. 确保SML特定类型的结果
- 19. 将文本框绑定到数据集查询的字段
- 20. SQL查询 - 尽量避免结果集中的数据不准确?
- 21. SPARQL:排除从查询结果数据类型URI
- 22. “无法确定指定数据集字段中的空间数据类型...”使用地图图层向导
- 23. 作为不同数据类型的MySQL查询字段
- 24. Elasticsearch在查询时转换字段的数据类型
- 25. 在数据集的列存储结果中选择查询计数特定值
- 26. 条件字段连接查询结果
- 27. 猫鼬查询结果丢失字段
- 28. mySQL - 使用另一个table.field中的数据来确定查询中的结果
- 29. LINQ查询数据表中返回不正确的结果
- 30. 显示查询结果列类型(PostgreSQL)
如何从数据库中获取数据?你不知道源列的类型吗? – jason 2010-02-02 18:22:59
存储过程,command.reader – Alex 2010-02-03 06:33:55