在条件表达式中获取数据类型不匹配

时间:2015-02-17 01:06:52

标签: vb.net compiler-errors mismatch

它在本地系统上工作正常但是当它在服务器上托管时,它给出了错误。我究竟做错了什么?

    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()

我正在使用Access作为数据库。 Forum列是另一个表的引用键,是interger(Number)数据类型。其余是文本数据类型。

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

    sqlcmd.ExecuteNonQuery()
  

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

    TextBox3.Text = ""

1 个答案:

答案 0 :(得分:2)

你似乎正在尝试做正确的事情并使用参数,但你弄得一团糟。该代码实际上将尝试将文本值“@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适用于您,请继续使用。