它在本地系统上工作正常但是当它在服务器上托管时,它给出了错误。我究竟做错了什么?
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 = ""
答案 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
适用于您,请继续使用。