我需要以字符串格式向mysql发送数据。默认情况下,vb.net将0.5解释为0,5,MySql不会接受。我知道我可以编写floatval.tostring.replace(",","。")以使其适合但我想知道是否可以使其更舒适以便从float到string的隐式转换会产生一个点而不是一个逗号?
编辑:按要求,当前代码
Public Sub InsertInto(Values As IEnumerable(Of String))
Dim ValStr As String = ""
For Each V In Values
ValStr &= "'" & V & "',"
Next
Dim Command = New MySqlCommand("INSERT INTO " & Table & " VALUES (" & ValStr.Substring(0, ValStr.Length - 1) & ");", Connection)
Command.ExecuteNonQuery()
End Sub
这个方法是mysql连接包装器和属性" Connection"的一部分。和"表"是预先分配的。
我的测试代码调用函数如下:
dimdum.InsertInto({"DEFAULT", (0.5).ToString.Replace(",", "."), "here is text"})
测试表列是自动迭代int作为主键,float和varchar
答案 0 :(得分:3)
正如我在上面的评论中所说,我担心你需要修改很多代码。因为你有很多问题,最糟糕的是Sql Injection迟早你需要修复,但你尝试转换字符串中的所有东西也有缺点,即小数,日期和其他浮点值的转换给出比Sql Injection更麻烦。
只有一种方法可以摆脱,它是使用参数化查询。要编写更多代码,但过了一段时间它就非常简单。
例如,您应该将代码重写为类似
的代码Public Sub InsertInto(sqlText As String, Values As List(Of MySqlParameter))
Using Connection = New MySqlConnection(... connectionstring here (or a global variable ....)
Using Command = New MySqlCommand(sqlText, Connection)
Connection.Open()
If Values IsNot Nothing Then
Command.Parameters.AddRange(values.ToArray)
End If
Command.ExecuteNonQuery()
End Using
End Using
End Sub
并使用此
调用它Dim decValue As Decimal = 0.5
Dim strValue As String = "Test"
Dim dateValue As DateTime = DateTime.Today
Dim parameters = New List(Of MySqlParameter)()
parameters.Add(New MySqlParameter() With { .ParameterName = "@p1",
.DbType = MySqlDbType.Decimal,
.Value = decValue})
parameters.Add(New MySqlParameter() With {.ParameterName = "@p2",
.DbType = MySqlDbType.String,
.Value = strValue})
parameters.Add(New MySqlParameter() With {.ParameterName = "@p3",
.DbType = MySqlDbType.Date,
.Value = dateValue})
InsertInto("INSERT INTO youTable VALUES(@p1, @p2, @p3)", parameters)
请注意,现在InserInto
只是一个简单的例程,它接收命令文本和文本所需的参数,将它们添加到命令中,打开连接,执行所有操作并退出关闭连接。
另请注意,使用参数化查询,您的sql命令完全没有由字符串的单引号引起的混乱,日期的格式规则和小数点的处理无处可见
(附注。这个INSERT INTO文本假设您的表中只有三个字段,并且您提供了所有字段的值,如果您只想插入一部分字段,那么您需要将它们作为第三个参数传递给方法)
答案 1 :(得分:1)
指定CultureInfo:
Dim n As Single
Dim s As String
n = Math.PI
s = n.ToString("F2", New System.Globalization.CultureInfo("en-US"))
s将为“3.14”,即使您的计算机设置为不同的格式。