- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在 VBS 中,考虑以下示例,ADODB.Recordset
对象的 Open()
方法返回什么(如果有)结果?
Dim CN : Set CN = CreateObject("ADODB.Connection")
Dim RS : Set RS = CreateObject("ADODB.Recordset")
CN.Open connectionString
RS.Open ("INSERT INTO db.table (username, computer_name, count) VALUES ('Whoever', 'Whatever', '99');", CN, 3)
在此示例中,调用 RS.MoveFirst()
会导致错误,表明调用 RS.Open()
实际上没有返回任何记录,尽管查询运行成功。我收到的错误是 -
Either BOF or EOF is True, or the current record has been deleted. Requested operation requires a current record.
我需要这个的原因是因为查询会自动生成一个 ID,我的代码需要这个 ID。我当然可以运行 SELECT
查询,但不返回结果似乎很奇怪。
最佳答案
您需要为要实例化的 ADODB.Recordset
传回一些内容。
Dim CN : Set CN = CreateObject("ADODB.Connection")
Dim RS : Set RS = CreateObject("ADODB.Recordset")
CN.Open connectionString
RS.Open ("INSERT INTO db.table (username, computer_name, count) VALUES ('Whoever', 'Whatever', '99'); SELECT LAST_INSERT_ID();", CN, 3)
就我个人而言,我倾向于使用 ADODB.Command
来编写此代码,而不是将 SQL 语句直接传递给 ADODB.Recordset
。
它还会在构建参数化查询时防止 SQL 注入(inject)。
类似的东西;
Dim cmd: Set cmd = CreateObject("ADODB.Command")
Dim rs, id
Const adCmdText = 1
Const adParamInput = 1
Const adVarWChar = 202
Const adInteger = 3
Dim sql: sql = "INSERT INTO db.table (username, computer_name, count) VALUES (?, ?, ?); SELECT LAST_INSERT_ID();"
With cmd
.ActiveConnection = connectionString
.CommandType = adCmdText
.CommandText = sql
Call .Parameters.Append(.CreateParameter("@username", adVarWChar, 50))
Call .Parameters.Append(.CreateParameter("@computer_name", adVarWChar, 50))
Call .Parameters.Append(.CreateParameter("@count", adInteger, 4))
Set rs = .Execute(, Array("Whoever", "Whatever", 99))
If Not rs.EOF Then id = rs(0)
End With
不确定您在 the comment 中要求什么但是如果你的意思是如何将这种方法与 RS.Open
一起使用,这应该会有所帮助;
Dim cmd: Set cmd = CreateObject("ADODB.Command")
Const adCmdText = 1
Const adParamInput = 1
Const adVarWChar = 202
Const adInteger = 3
Const adOpenStatic = 3
Dim sql: sql = "INSERT INTO db.table (username, computer_name, count) VALUES (?, ?, ?); SELECT LAST_INSERT_ID();"
With cmd
.ActiveConnection = connectionString
.CommandType = adCmdText
.CommandText = sql
Call .Parameters.Append(.CreateParameter("@username", adVarWChar, 50))
Call .Parameters.Append(.CreateParameter("@computer_name", adVarWChar, 50))
Call .Parameters.Append(.CreateParameter("@count", adInteger, 4))
.Parameters("@username").Value = "Whoever"
.Parameters("@computer_name").Value = "Whatever"
.Parameters("@count").Value = 99
End With
Dim rs: Set rs = CreateObject("ADODB.Recordset")
Dim id
Call rs.Open(cmd, , adOpenStatic)
If Not rs.EOF Then id = rs(0)
我现在已经阅读了一些关于 LAST_INSERT_ID()
的内容,这在文档中对我来说很突出
From MySQL 5.7 Reference Manual - 13.14 Information Functions
The ID that was generated is maintained in the server on a per-connection basis. This means that the value returned by the function to a given client is the first AUTO_INCREMENT value generated for most recent statement affecting an AUTO_INCREMENT column by that client. This value cannot be affected by other clients, even if they generate AUTO_INCREMENT values of their own. This behavior ensures that each client can retrieve its own ID without concern for the activity of other clients, and without the need for locks or transactions.
这意味着只要您保持相同的连接,您就可以执行多个命令,并且仍然会返回一个特定于您的连接的 ID
。
Dim conn: Set conn = CreateObject("ADODB.Connection")
Dim cmd: Set cmd = CreateObject("ADODB.Command")
Dim rs, id
Const adCmdText = 1
Const adParamInput = 1
Const adVarWChar = 202
Const adInteger = 3
Const adExecuteNoRecords = &H00000080
Const adOpenStatic = 3
Dim sql: sql = "INSERT INTO db.table (username, computer_name, count) VALUES (?, ?, ?);"
Call conn.Open(connectionString)
With cmd
Set .ActiveConnection = conn
.CommandType = adCmdText
.CommandText = sql
Call .Parameters.Append(.CreateParameter("@username", adVarWChar, 50))
Call .Parameters.Append(.CreateParameter("@computer_name", adVarWChar, 50))
Call .Parameters.Append(.CreateParameter("@count", adInteger, 4))
Set rs = .Execute(, Array("Whoever", "Whatever", 99), adExecuteNoRecords)
End With
Call rs.Open("SELECT LAST_INSERT_ID;", conn, adOpenStatic)
id = rs(0)
Set cmd = Nothing
Call conn.Close()
Set conn = Nothing
关于mysql - VBS中,使用 'INSERT INTO'返回MySQL查询结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37570027/
我使用 IBM Personal Communications 12.0.3.0 的宏记录器制作了一个凭据输入宏。它只是在调用时输入我的用户名和密码。 sub Credentials() Dim
该批处理更改了 vbs 代码,使其无法供 vbs 使用。我该如何解决这个问题? 批号: echo Const HIGH = 128 >> prio.vbs echo strComputer = "."
我有 2 个 vbs 文件。 A.vbs: Class test public a public b End Class B.vbs: Dim objShell Set objShell =
以下是我用来尝试在 IIS 6 中创建虚拟目录的条目: [Run] Filename: {tmp}\cscript.exe mkvirtdir.vbs; Parameters: "-c LocalHo
核心vbs代码 ? 1
对于vbs中ping的实现可以通过两种方式 : 1、调用系统ping命令; 2、使用wmi查询pingstate类处理。 1、调用系统ping命令
在看vb开发,看到二维数组时突发奇想用二维数组作为游戏关卡; 1. 选择操作: 游戏开始时会提示选择注册, 登录, 退出三种选项, 2.注册: 注册成功会将用户账户与密码存入用户数据txt文档中
复制指定文件到指定目录下 核心代码 ? 1
复制代码 代码如下: On Error Resume Next Dim WshShell, QQPath, QQselect set wshshell=createobject("
运行前请确定你的电脑安装了word。 复制代码 代码如下: i=0 set wshshell=createobject("wscript.shell") Set objWo
参考代码一: 复制代码 代码如下: Function DeleteLog( ) Dim objFSO, objFolder, strPath,
挺实用的一段代码,用来深入学习vbs,确实不错咯。 复制代码 代码如下: On Error Resume Next '忽略所有错误 Dim filename '声明变量 Di
话说还是闲来练手,初步实现了自己认为的“多线程”下载。(至于是不是多线程,可以参考12楼链接) 为避免冗余,省了一些错误检查。我觉得没多大实际用途,有兴趣的兄弟一起学习讨论呗。欢迎大家指正: 复制
复制代码 代码如下: set oDOM = WScript.GetObject("http://ipseeker.cn//") flag=0 for i=1 to 10 &n
复制代码 代码如下: on error resume next url = " http://www.bathome.net/logging.php?action=login"
效果图: 代码都封装成函数了,方便调用: 复制代码 代码如下: Key = "www-enun-net" '不要用数字
打开狗狗影视,搜索自己需要的资源,资源类型选:电驴,如下图: 我找到一个 19.75gb 的: 点开它,出现如下图的界面,可以看到正常下载地址已被屏蔽。我们复制地址栏中的网址,备用。
最近相关的备份比较频繁,为了校验文件的完整性,老是要打开某文件HASH校验工具,比较麻烦,于是乎写了这个东东,文件较大时计算有点慢,文件的MD5值保存在剪贴板!效果如图: 使用方法: 1.先
CMD当前路径 复制代码 代码如下: test = createobject("Scripting.FileSystemObject").GetF
For Next 语句的基本结构为: 复制代码 代码如下: For counter = start To end [Step step] [statements] [Exit For] [st
我是一名优秀的程序员,十分优秀!