【发布时间】:2021-10-15 16:37:31
【问题描述】:
执行命令后,我的 vb.net 例程出现错误,出现错误:
必须声明@nameD 变量
SQL Server 中的表是:
name: TAB,
ID integer unique,
NameD varchar(50)
我不明白为什么会出现此错误。
是因为我在本地系统上使用了 OLEdb 吗?我只是将项目转换为 SQL Server 还是查询中有错误?
注意我用这些参数打开连接:
Dim strsql As String = ""
Dim strConn As String = "Provider=MSOLEDBSQL;Server=0.0.0.0;Database=****;UID=sa;PWD=***;"
Dim Conn As New OleDbConnection
这就是函数
Public Function Ins() as integer
strsql = "INSERT INTO TAB (nameD) VALUES (@nameD)"
Dim CMD as New OleDbCommand(strsql, Conn)
With CMD
.Parameters.Add("@nameD", OleDbType.VarChar).Value = "aaa"
.ExecuteNonQuery()
End With
CMD = Nothing
Dim COnt As Long
Dim cmdC As OleDbCommand = New OleDbCommand("SELECT@@IDENTITY", Conn)
COnt = CType(cmdC.ExecuteScalar, Integer)
Return COnt
end function
我试过了
CMD.Parameters.AddWithValue("@nameD", "aaa")
【问题讨论】:
-
OleDbParameter remarks: “OLE DB.NET Framework 数据提供程序使用标有问号 (?) 的位置参数,而不是命名参数。”
-
我不是 100% 确定使用
OleDb支持它(它不支持 Access,但可能是 Jet/ACE 的东西)但是,如果你使用SqlClient,你可以这样做INSERT和SELECT在同一命令中,只需调用ExecuteScalar。 -
它实际上并不会受到伤害,但是将您的调用结果转换为
ExecuteScalar作为Integer类型然后将其分配给Long变量到底有什么意义?这只是表明缺乏思想。 -
是的,这是一个问号 (?),我正在迁移一个项目,它可以工作
-
@jmcilhinney 通过 Access 及其 OleDb 提供程序,您可以使用命名参数(
SELECT、INSERT等)。名称只是被忽略,唯一考虑的当然是位置,与将参数添加到命令的顺序有关。
标签: sql-server vb.net