使用 SQLDataReader 读取 IP 地址
Posted
技术标签:
【中文标题】使用 SQLDataReader 读取 IP 地址【英文标题】:Read IP Address using SQLDataReader 【发布时间】:2016-11-17 16:48:44 【问题描述】:使用 ASP.Net 应用程序,我想使用 SQLDataReader 从 SQL 数据库中提取 IPv4 信息。从 SQL 读取 IP 时,数据类型是二进制的,我不确定处理这个问题的最佳方法。
由于没有 SQLDataReader.GetIPAddress() 的方法,看来我需要使用 SQLDataReader.GetBytes()?网上有很多关于如何做到这一点的例子,但是由于 getstring 非常简单,我希望有另一种更简单的方法来使用 getbyte() 或另一种方法来引入 IP。
Do While SQLReader.Read()
Dim lastcom As System.DateTime = SQLReader.GetDateTime(0)
Debug.WriteLine(lastcom.ToString("MM/dd/yyyy HH:mm:ss.fff"))
Debug.WriteLine(SQLReader.GetString(1))
Debug.WriteLine(SQLReader.GetBoolean(2))
Debug.WriteLine(SQLReader.GetString(3))
Debug.WriteLine(SQLReader.GetString(4))
Label_IP = SQLReader.GetString(1)
Label_Model.Text = SQLReader.GetString(4)
Loop
【问题讨论】:
您是否正在尝试将其转换为 C#?存储在数据库中的 IP 是什么,我假设它将存储为String
,例如 varchar
或 nvarchar
。
无需转换为 c#。我通常在 vb.net 中编写。Getstring 失败说“无法将 'System.Byte[]' 类型的对象转换为 'System.String' 类型。 " GetDataTypeName 返回列的二进制文件,但在数据库中,该列仅包含格式类似于 xx.xx.xx.xx 的实际 ipv4 地址。
我拒绝编写 Visual Basic,但将其检索为 byte[]
,而在 C# 中您只需这样做:System.Text.Encoding.GetString(...)
。因此,将byte[]
转换回字节数据中的字符串值。
【参考方案1】:
我对 IP 地址在数据库中的存储方式做了一些假设(并且仅支持 IPv4 地址),但您可以尝试这样的操作:
Dim ipAddr(3) As Byte
' Assuming that column #1 is your IP address column
Dim byteCount = SQLReader.GetBytes(1, 0, ipAddr, 0, 4)
If byteCount = 4 Then
Label_IP.Text = New IPAddress(ipAddr).ToString()
Else
Console.WriteLine("Expected 4 bytes for IP address")
End If
【讨论】:
完美运行!谢谢!.. 还进一步查看,在负责二进制转换的 sql 端找到了一些存储过程。不知道为什么会出现这种情况,但无论哪种方式都非常感谢您的帮助! @jewbacca 很高兴它有帮助。不确定存储过程会做什么 -IPAddress.GetAddressBytes
将返回 IP 地址的字节数组。您可能还想看看this - 投票/接受答案是表达感谢的最佳方式。 :-)以上是关于使用 SQLDataReader 读取 IP 地址的主要内容,如果未能解决你的问题,请参考以下文章
使用Visual Studio自带数据库配合SqlDataReader 读取数据库数据
SQLDataReader 在 ExecuteReader 之后读取为空
C#-使用SqlDataReader读取过程的输出参数[duplicate]
C#使用SqlDataReader读取数据库数据时CommandBehavior.CloseConnection参数的作用