【问题标题】:Getting Data type mismatch in criteria expression在标准表达式中获取数据类型不匹配
【发布时间】:2015-02-17 01:06:51
【问题描述】:

它在本地系统上运行良好,但在服务器上托管时,它会出错。我究竟做错了什么?

    Dim ForumID As String = Session("ForumID").ToString()
    Dim cforumId As Int32 
    cforumId = Convert.ToInt32(ForumID)
    Dim userId As String = User.Identity.Name.ToString()
    Dim Comments As String = (TextBox3.Text).ToString().Replace(Environment.NewLine,"<br />")       
    DIm PostedTime As String = DateTime.Now.ToString("f")
    Dim sqlcmd As OleDbCommand

    connection.ConnectionString = ("Provider=Microsoft.Jet.OLEDB.4.0;data source=" & Server.MapPath("Database.mdb"))
    connection.Open()

我将访问用作数据库。论坛列是另一个表的引用键,是整数(数字)数据类型。其余为文本数据类型。

    sqlcmd = New OleDbCommand("insert into Thread (ForumID, Comments, UserID, PostedTime) values('@cforumId','@Comments','@userId','@PostedTime')", connection)

    sqlcmd.ExecuteNonQuery()

条件表达式中的数据类型不匹配。

    TextBox3.Text = ""

【问题讨论】:

    标签: vb.net compiler-errors mismatch


    【解决方案1】:

    您似乎正在尝试做正确的事情并使用参数,但您却把它弄得一团糟。该代码实际上将尝试将文本值“@cforumId”、“@Comments”、“@userId”和“@PostedTime”分别插入到 ForumID、Comments、UserID 和 PostedTime 列中。您需要做的是在VALUES 子句参数占位符而不是字符串中制作这些内容,然后添加适当的参数,例如

    sqlcmd = New OleDbCommand("INSERT INTO Thread (ForumID, Comments, UserID, PostedTime) VALUES ('@ForumID','@Comments','@UserID','@PostedTime')", connection)
    
    With sqlcomd.Parameters
        .AddWithValue("@ForumID", forumId)
        .AddWithValue("@Comments", comments)
        .AddWithValue("@UserID", userId)
        .Add("@PostedTime", OleDbType.Date).Value = postedTime
    End With
    
    sqlcmd.ExecuteNonQuery()
    

    请注意,添加和设置最后一个参数的方式是不同的,因为在默认情况下,AddWithValue 会为 DateTime 值推断错误的数据类型。如果AddWithValue 适合你,那就去吧。

    【讨论】:

      猜你喜欢
      • 2021-11-09
      • 2013-12-23
      • 1970-01-01
      • 2021-08-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多