mysql - 使用 dotnet String.Format 将数据保存到数据库失败

标签 mysql sql vb.net

我来自脚本世界,所以 .NET 对我来说非常陌生。我有以下字符串格式,用于将数据保存到数据库。我可能错过了一些非常简单的东西。

Dim str = String.Format("INSERT INTO invoice_labels(WOpre, WOsuf, ModelNumber, SupplierID, BoxNo, BoxQty, Stamp, MachineName) VALUES({0}, {1}, '{2}', {3}, {4}, {5}, '{6}', '{7}')", WoPre_TB.Text, WoSuf_TB.Text, ModelPN_TB.Text, SupplierID_TB.Text, BoxNumber_TB.Text, FullBoxQty_TB.Text, FormattedDate, MachineName)

第 3、7 和 8 列值都是字符串,其余都是整数值。 MySQL 提示日期列 (FormattedDate),但是当我回显该字符串时,SQL 语句是好的。我可以根据 echo 的内容手动重新创建插入语句并保存数据。

有人能给我一些启发吗?

最佳答案

首先,始终使用参数来避免Sql注入(inject)。不要使用String.Format。 您需要检查数据库中每个字段的数据类型,并相应地更正 MySqlDbType 和 TextBoxes 的 .Text 属性的转换。 在设置参数的 .Value 属性之前,应验证用户的每个输入。

    Dim str = "INSERT INTO invoice_labels(WOpre, WOsuf, ModelNumber, SupplierID, BoxNo, BoxQty, Stamp, MachineName) VALUES(@WOpre, @WOsuf, @ModelNumber, @SupplierID, @BoxNo, @BoxQty, @Stamp, @MachineName);"
    Using cn As New MySqlConnection("Your connection string")
        Using cmd As New MySqlCommand(str, cn)
            cmd.Parameters.Add("@WOpre", MySqlDbType.Int32).Value = CInt(WoPre_TB.Text)
            cmd.Parameters.Add("@WOsuf", MySqlDbType.Int32).Value = CInt(WoSuf_TB.Text)
            cmd.Parameters.Add("@ModelNumber", MySqlDbType.String).Value = ModelPN_TB.Text
            cmd.Parameters.Add("@SupplierID", MySqlDbType.Int32).Value = CInt(SupplierID_TB.Text)
            cmd.Parameters.Add("@BoxNo", MySqlDbType.Int32).Value = CInt(BoxNumber_TB.Text)
            cmd.Parameters.Add("@BoxQty", MySqlDbType.Int32).Value = CInt(FullBoxQty_TB.Text)cmd.Parameters.Add("", MySqlDbType.Int32).Value =
            cmd.Parameters.Add("@Stamp", MySqlDbType.String).Value = FormattedDate
            cmd.Parameters.Add("@MachineName", MySqlDbType.String).Value = MachineName
            cn.Open()
            cmd.ExecuteNonQuery()
        End Using
    End Using

关于mysql - 使用 dotnet String.Format 将数据保存到数据库失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56834979/

相关文章:

sql - 使用 VARCHAR(max)、NVARCHAR(max) 和 VARBINARY(max) 代替 TEXT、NTEXT 和 IMAGE 有什么好处?

android - SQLite 查询 : selecting the newest row for each distinct contact

mysql - 在mysql和vb.net上插入数据

php - 从 jplayer 的 mysql 数据库获取 URL

mysql - 两个相似查询(MySQL ORDER 子句)的巨大速度差异

MYSQL:选择字段值的总和同时还选择唯一值?

mysql - CodeIgniter 查询数据库中的错误号 1064

SQL Developer 和 SQL Programmers 一样吗?

c# - 在所有打开的资源管理器窗口的列表框中获取路径

database - 无法用数据填充 OleDbDataAdapter