vb.net - 我如何解决 ExecuteNonQuery 抛出异常“?”附近的语法不正确
问题描述
Dim StrSql = "update student set id=?"
Updated (StrSql,15)
Public Function Updated (ByVal strSql As String, ByVal ParamArray Parameters As String ())
For Each x In Parameters
cmd.Parameters.AddWithValue("?",x)
Next
cmd.ExecuteNonQuery()
End Function
解决方案
你没有给我们留下太多继续前进的空间;正如 jmcilhinney 指出的那样,您需要为未来的问题添加更多细节。例如,在这一个中,您的代码根本无法编译,没有提及任何变量的类型,您没有给出数据库的名称......
...我相当确定“附近的语法不正确”是 SQL Server 的事情,在这种情况下,您需要记住它(重新)使用命名参数,这与使用位置参数的 Access 不同:
SQL Server:
strSql = "SELECT * FROM person WHERE firstname = @name OR lastname = @name"
...Parameters.AddWithValue("@name", "Lee")
Access:
strSql = "SELECT * FROM person WHERE firstname = ? OR lastname = ?"
...Parameters.AddWithValue("anythingdoesntmatterwillbeignored", "Lee")
...Parameters.AddWithValue("anythingdoesntmatterwillbeignoredalso", "Lee")
这确实意味着您的功能需要变得更加智能;也许传递 KeyValuePair(Of String, Object) 的 ParamArray
或者你现在应该停止这样做,转而使用 Dapper。Dapper 接受您的查询,应用您的参数并在您要求时返回对象:
Using connection as New SqlConnection(...)
Dim p as List(Of Person) = Await connection.QueryAsync(Of Person)( _
"SELECT * FROM person WHERE name = @name", _
New With { .name = "John" } _
)
' use your list of Person objects
End Using
是的,所有添加参数 BS,执行阅读器,并将结果转换为 Person .. Dapper 完成了这一切。非查询就像connection.ExecuteAsync("UPDATE person SET name=@n, age=@a WHERE id=@id", New With{ .n="john", .a=27, .id=123 })
推荐阅读
- gnupg - 使用通配符的 PGP 脚本
- beautifulsoup - 美丽的汤:如何在 td 中获取时间戳
- python - 在 url 中查找 / 的出现
- tensorflow - 我的损失自定义函数是否像我认为的那样做?
- python - 用于 Java API 的 Python 客户端
- javascript - 如何使用 d3 select 选择 div 的 svg 子元素
- python - 使用 HTML 标签到 DataFrame 的文本文件
- gatsby - gatsby-plugin-mdx 无法同时解析来自 frontmatter 和 body 的图像
- xml - 如何使用 XMLSlurper 修改 XML 节点属性
- r - R之间的功能未正确执行