Vb.net 输入字符串有时格式不正确
我在互联网上找到了一段代码,这段代码是为了满足将datareader连接到.csv文件的需要而采用的。我正在提取的数据库文件的范围从10列到200列。在一些查询中,我发现输入字符串的格式不正确;我相信这发生在我代码的转换部分,它将读取器值更改为字符串。附件是代码Vb.net 输入字符串有时格式不正确,vb.net,csv,Vb.net,Csv,我在互联网上找到了一段代码,这段代码是为了满足将datareader连接到.csv文件的需要而采用的。我正在提取的数据库文件的范围从10列到200列。在一些查询中,我发现输入字符串的格式不正确;我相信这发生在我代码的转换部分,它将读取器值更改为字符串。附件是代码 Dim sw As New StreamWriter(filename) Try Using Conn As New Odbc.OdbcConnection(ConnStr) Using Cmd As New O
Dim sw As New StreamWriter(filename)
Try
Using Conn As New Odbc.OdbcConnection(ConnStr)
Using Cmd As New Odbc.OdbcCommand(query, Conn)
Conn.Open()
Using dr As Odbc.OdbcDataReader = Cmd.ExecuteReader()
Dim fields As Integer = dr.FieldCount - 1
While dr.Read()
Dim sb As New StringBuilder()
Dim i As Integer = 0
While i <= fields
If i <> fields Then
sep = ","
Else
sep = ""
End If
sb.Append(dr(i) + sep)
i += 1
End While
sw.WriteLine(sb.ToString())
End While
End Using
End Using
sw.Close()
sw.Dispose()
Conn.Close()
Conn.Dispose()
End Using
Dim sw作为新StreamWriter(文件名)
尝试
将Conn用作新的Odbc.OdbcConnection(ConnStr)
使用Cmd作为新的Odbc.Odbc命令(query,Conn)
康涅狄格州公开赛
使用dr作为Odbc.OdbcDataReader=Cmd.ExecuteReader()
将字段设置为整数=dr.FieldCount-1
而里德博士
使某人成为新的架线工
尺寸i为整数=0
而我最有可能的罪魁祸首是线路
sb.Append(dr(i) + sep)
VB使用&
运算符连接字符串,尝试将其替换为
sb.Append(dr(i) & sep)
或者更好地使用不同的逻辑,而不是
If i <> fields Then
sep = ","
Else
sep = ""
End If
sb.Append(dr(i) + sep)
您是否有关于抛出错误的位置的更多信息—堆栈跟踪等。我看不到您的代码中有任何明显的抛出该错误的信息。请指定抛出异常的行。我不确定代码是否会导致该错误。这个错误通常是由于试图将某些内容从字符串解析为另一种类型而导致的——您的做法正好相反。最接近的是dr(i)
,DataReader项是Object
,隐含的ToString应该可以正常工作。一定要确保选项严格,我没有编辑你的标题。请参见“”,其中一致意见是“不,他们不应该”。您不需要Conn.Close()
和Conn.Dispose()
,因为您在块中有Conn
。您也应该在使用块的中使用sw
,在这种情况下,您不需要sw.Close()
和sw.Dispose()
。我进行了这些调整,但仍然得到相同的错误。我已经在上面发布了调试带来的好处up@JefforyDampier错误发生在第sb行。Append(dr(i))-验证发生错误时dr(i)
的值是多少。您可能需要添加一些验证来说明空值。该值当时看起来是双精度的。您对验证空值有什么建议吗?@JefforyDampier在我的答案中添加了基本检查,请参见编辑。添加此验证后,现在出现错误:If dr(I)为DBNull.value或lse dr(I)那么,当查看错误消息时,它似乎正在尝试将字符串转换为数字吗?
sb.Append(dr(i))
If i <> fields Then sb.Append(",")
If dr(i) Is DbNull.Value OrElse dr(i) Is Nothing Then
sb.Append("[No Data]")
Else
sb.Append(dr(i))
End If