Sql ';条件表达式中的数据类型不匹配';使用插入到非查询中

Sql ';条件表达式中的数据类型不匹配';使用插入到非查询中,sql,vb.net,Sql,Vb.net,我试图将值插入数据库,但在代码的这一部分遇到上述错误: Dim InsertUser As OleDbCommand = New OleDbCommand("INSERT INTO [User] ([User ID], [User Name], [Total Score]) VALUES (@NO,'@Tid',@Sid);", DatabaseConnection) InsertUser.Parameters.AddWithValue("

我试图将值插入数据库,但在代码的这一部分遇到上述错误:

                Dim InsertUser As OleDbCommand = New OleDbCommand("INSERT INTO [User] ([User ID], [User Name], [Total Score]) VALUES (@NO,'@Tid',@Sid);", DatabaseConnection)
            InsertUser.Parameters.AddWithValue("@NO", NumberOfUsers + 1)        
            InsertUser.Parameters.AddWithValue("@Tid", txtUserName.Text)        
            InsertUser.Parameters.AddWithValue("@Sid", CInt(lblScore.Text))     
            InsertUser.ExecuteNonQuery()

[User ID]和[Total Score]是数字,[User Name]是数据库中的短文本,[NumberOfUsers]是整数。我不确定我做错了什么。

我注意到了几件事:

  • @Tid
    周围的SQL字符串中有一组额外的单引号
  • OleDb通常不支持命名参数(少数提供程序也有例外,但对于占位符通常需要使用
  • 我们看不到您在哪里打开连接
  • 对于特定于数据库类型和长度的
    Add()
    重载,最好避免使用
    AddWithValue()
    。这有助于提高性能,并避免由错误的数据库类型转换引起的问题
  • 对大多数查询使用单独的新连接对象,这些查询只在可能的最短时间内打开(通常通过Using块控制)。使用OleDb,这有助于限制表的争用/阻塞,并有助于减少数据库损坏
此代码包括以下修复程序:

Dim sql As String=“插入到[用户]([用户ID],[用户名],[总分])值(?,,?);”
使用DatabaseConnection=New-OleDbConnection(“此处为连接字符串”)_
插入器作为新的OleDbCommand(sql、数据库连接)
'猜测列类型。使用数据库中的实际列类型和长度
InsertUser.Parameters.Add(“@NO”,OleDbType.Integer)。Value=NumberOfUsers+1
InsertUser.Parameters.Add(“@Tid”,OleDbType.VarWChar,20)。Value=txtUserName.Text
InsertUser.Parameters.Add(“@Sid”,OleDbType.Integer).Value=CInt(lblScore.Text)
DatabaseConnection.Open()
InsertUser.ExecuteNonQuery()
终端使用

只需删除“@Tid”中的单引号即可。您是一位圣徒,这里需要解决的问题不止是这一个问题。