【问题标题】:ODBC connection to MySQL won't add values与 MySQL 的 ODBC 连接不会添加值
【发布时间】:2011-05-14 15:33:45
【问题描述】:

我正在尝试将值从我的 asp.net 应用程序插入到我的 MySQL 数据库中。

在注册页面上,人们可以填写NamePass并按提交。

Public Function InsertMember(ByVal objMember As Member) As Boolean

    myconn.Open()

    Dim cmd As New OdbcCommand("INSERT INTO member(Name, Pass) VALUES (@Name,@Pass)", myconn)

    cmd.CommandType = CommandType.Text
    cmd.Parameters.Add("Name", OdbcType.VarChar).Value = objMember.Name
    cmd.Parameters.Add("Pass", OdbcType.VarChar).Value = objMember.Pass

    cmd.ExecuteNonQuery()

    cmd.Dispose()
    cmd = Nothing

    myconn.Close()
    myconn.Dispose()

    Return True

End Function

但这所做的只是将 NULL 值添加到我的数据库中。

关于我做错了什么的任何线索?

【问题讨论】:

    标签: .net mysql vb.net ado.net odbc


    【解决方案1】:

    如何切换约定以使用? 和与列名匹配的参数名称? 如果可以的话,也许考虑切换到AddWithValue()

    来自MSDN OdbcParameterCollection.Add Method

    Dim insertSQL As String = "INSERT INTO member(Name, Pass) VALUES (?,?)"
    Dim cmd As New OdbcCommand(insertSQL, myconn)
    'cmd.Parameters.Add("Name", OdbcType.VarChar).Value = objMember.Name '
    
    cmd.Parameters.AddWithValue("Name", objMember.Name)           
    cmd.Parameters.AddWithValue("Pass", objMember.Pass) 
    
    'Note that with ODBC Command, the ORDER you add to the parameters collection
    'matters most. The names of your params don't matter. 
    

    我怀疑? 占位符在添加到参数集合(来自another question/answer)时会按顺序填充值。

    【讨论】:

    • 只是试了一下,没有任何改变,没有添加任何内容。
    • 肯定 :) 当我在执行查询之前调试时,我看到应该添加哪些值。是的,连接字符串是正确的,因为添加了一行并且所有值都包含 NULL
    • 嗯,我可以看到 objMember.Name 和 objMember.Pass 的值?
    • 嗯我想我看错东西了?当我打开 cmd 或 cmd.Parameters 时,我看到一些不同的东西,例如:Count、IsFixedSize、Item、Item、...
    • 确认如果你硬编码一个像 "INSERT INTO .... VALUES ('foo', 'bar')" 这样的值,插入工作正常吗?
    【解决方案2】:

    这是一篇文章的链接,可以解决您的问题。基本上,用 ? 替换 @ 字符字符。

    http://forums.asp.net/t/1283161.aspx

    该论坛中的 OP 在插入空值时遇到问题,就像您一样。解决方案是修改代码如下:

    Dim cmd As New OdbcCommand("INSERT INTO member(Name, Pass) VALUES (?Name,?Pass)", myconn)
    
    cmd.CommandType = CommandType.Text
    cmd.Parameters.Add("?Name", objMember.Name)
    cmd.Parameters.Add("?Pass", objMember.Pass)
    
    cmd.ExecuteNonQuery()
    

    如果你想为字段指定值类型,你可以像以前那样做,但你应该像这样添加长度:

    cmd.Parameters.Add("?Name", OdbcType.VarChar, 30).Value = objMember.Name
    

    希望对你有帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-19
      • 1970-01-01
      • 1970-01-01
      • 2020-07-06
      • 2012-12-04
      • 1970-01-01
      • 2011-03-20
      • 1970-01-01
      相关资源
      最近更新 更多