尝试在另一台PC上运行vb应用程序时出现此错误.有没有我可以下载这个DLL的地方?
我是新手,有这个问题.我可以使用SQLDataReader而不是Recordset.我想在SQLDataReader中实现以下结果.
Dim dbConn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim sqlstr As String = "SELECT Name,Status FROM table1 WHERE id=" + item_id.Value.ToString
rs.Open(SQL, dbConn)
While Not rs.EOF
txtName.Text = rs.Fields.Item("Name").Value
ddlstatus.SelectedIndex = 1
rs.MoveNext()
End While
rs.Close()
rs = Nothing
dbConn.Close()
dbConn = Nothing
Run Code Online (Sandbox Code Playgroud)
我可以用SQLDataReader替换记录集吗?如果可以,请告诉我代码中的更改?
Dim rs as ADODB.Recordset
set rs = ReturnARecordset 'assume ReturnARecordset does just that...
'do something with rs
rs.Close
set rs = Nothing
Run Code Online (Sandbox Code Playgroud)
是否有必要在将其设置为空之前调用rs.Close?
编辑:我们有一个全局连接,我们在应用程序的持续时间内保持打开状态,所有记录集对象都使用相同的连接.我在下面看到两个答案,谈到需要关闭记录集以确保连接不会悬空.对我而言,这听起来像很多愚蠢的谈话,因为连接是用连接对象控制的,而不是记录集对象吗?但如果我在这里遗漏了什么,请告诉我......
我已经做了很多阅读,但仍然不理解100%SQL注入的发生方式!
我想从那些知道基于我的例子的SQL注入的具体例子中看到它,因此它可以被复制,测试和修复.我试过SQL注入我的代码而不能,所以我希望有人来证明我的意思!
1.我认为SQL注入只能通过POST或GET方法进行,这意味着在网站上它应该是帖子形式,例如'注册或搜索'或查询如'search.php?tags = love'?
说这可以注入以下具有POST方法的代码吗?
$name = trim($_POST['username']);
$mail = trim($_POST['email']);
$password = trim($_POST['password ']);
if ($errors == "false") {
$sql =
"INSERT INTO
clients
SET
name='" . mysql_real_escape_string($name) . "',
mail='" . mysql_real_escape_string($mail) . "',
password='" . mysql_real_escape_string(sha1($password)) . "'";
$connection->execute($sql);
}
Run Code Online (Sandbox Code Playgroud)
2.另一个有GET方法: rate.php?like&videoID=250&userID=30
$sql =
"SELECT
videoID
FROM
likes
WHERE
videoID = '" .mysql_real_escape_string($videoID). "' AND UID = '" .mysql_real_escape_string($userID). "' LIMIT 1";
$connection->execute($sql);
Run Code Online (Sandbox Code Playgroud)
请帮助那些对主题感到自由的人,但请使用具体的例子.
提前谢谢,
伊利亚
我试图获得一些旧的VB6代码与SQL Server Compact一起使用.
我可以连接,打开数据库,一切似乎都很好.我可以运行插入选择命令.
但是,ADODB.Recordset RecordCount属性始终返回-1,即使我可以访问Fields并查看数据.更改CursorLocation = adUseClient会在执行SQL(多步操作生成错误)时导致问题.
Option Explicit
Private Const mSqlProvider As String = "Provider=Microsoft.SQLSERVER.CE.OLEDB.3.5;"
Private Const mSqlHost As String = "Data Source=C:\Database.sdf;"
Private mCmd As ADODB.Command ' For executing SQL
Private mDbConnection As ADODB.Connection
Private Sub Command1_Click()
Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset
Dim DbConnectionString As String
DbConnectionString = mSqlProvider & _
mSqlHost
Set mDbConnection = New ADODB.Connection
mDbConnection.CursorLocation = adUseServer
Call mDbConnection.Open(DbConnectionString)
If mDbConnection.State = adStateOpen Then
Debug.Print (" Database is open")
' …Run Code Online (Sandbox Code Playgroud) 有什么办法来设置CursorType为ADODB.RecordSet我从获得ADODB.Command.Execute?
我知道如果我这样做有可能:
rs = Server.CreateObject("ADODB.RecordSet")
rs.Open(cmd)
Run Code Online (Sandbox Code Playgroud)
不过,我目前使用Command.Execute与Parameters参数,自动处理的变型阵列?安全插补参数.因此使用RecordSet.Open似乎不是一种选择.
具体来说,我的代码目前看起来像:
function ExecuteSQL(conn, sql, args)
set ExecuteSQL_CmdObj = Server.CreateObject("ADODB.Command")
ExecuteSQL_CmdObj.CommandType = adCmdText
ExecuteSQL_CmdObj.CommandText = sql
ExecuteSQL_CmdObj.ActiveConnection = conn
if Ubound(args) = -1 then
set ExecuteSQL = ExecuteSQL_CmdObj.Execute
else
set ExecuteSQL = ExecuteSQL_CmdObj.Execute(,args)
end if
end function
Run Code Online (Sandbox Code Playgroud)
如果我想维护这个相同的API,还要控制CursorType,如何实现呢?
在专家交流和teck共和国有一些文献可以 使用combobox.recordset属性来填充Access表单中的组合框.
这些控件通常在控件的"rowsource"属性中填充"SELECT*"字符串,引用应用程序客户端上可用的表或查询.当我需要在组合框中显示服务器端数据时,我创建一个临时本地表并导入请求的记录.这非常耗时,特别适用于大型桌子.
能够使用记录集来填充组合框控件将允许用户直接显示来自服务器端的数据.
受前面两个例子的启发,我写了一些代码如下:
Dim rsPersonne as ADODB.recordset
Set rsPersonne = New ADODB.Recordset
Set rsPersonne.ActiveConnection = connexionActive
rsPersonne.CursorType = adOpenDynamic
rsPersonne.LockType = adLockPessimistic
rsPersonne.CursorLocation = adUseClient
rsPersonne.Open "SELECT id_Personne, nomPersonne FROM Tbl_Personne"
fc().Controls("id_Personne").Recordset = rsPersonne
Run Code Online (Sandbox Code Playgroud)
哪里:
不幸的是,它不起作用!
在调试模式下,我能够检查记录集是否已正确创建,具有请求的列和数据,并且与组合框控件正确关联.不幸的是,当我显示表单时,我不断得到一个空的组合框,没有记录!任何帮助都非常感谢.
编辑:
这个记录集属性确实可用于特定的组合框对象,而不是标准控制对象,几天前我发现它非常惊讶.我已经尝试使用combobox的回调函数,或者使用组合框的"addItem"方法填充列表.所有这些都很耗时.
我无法通过ADODB和Oracle 使用with子句执行SQL查询.
也就是说,以下代码段有效:
Dim cn As ADODB.connection
Set cn = ....
Dim rs As ADODB.recordSet
Set rs = New ADODB.Recordset
rs.Open "select 'foo' x from dual", cn
Do While Not rs.eof
...
rs.MoveNext
Loop
Run Code Online (Sandbox Code Playgroud)
但是,以下操作无效 - 它会导致运行时错误3704:关闭对象时不允许操作.
Dim cn As ADODB.connection
Set cn = ....
Dim rs As ADODB.recordSet
Set rs = New ADODB.Recordset
rs.Open "with w as (select 'foo' x from dual) select x from w", cn
Do While Not rs.eof
...
rs.MoveNext
Loop
Run Code Online (Sandbox Code Playgroud)
显然,这是一个真实问题的精简版演示,它包含一个更复杂的查询.
在我看来,ADODB在将查询传递给Oracle实例之前解析查询,并且不理解 …
我在excel中有以下UDF,它使用ADO连接到我的MSSQL服务器.它应该执行标量udf"D100601RVDATABearingAllow".
由于某种原因,我尝试附加的参数不会发送到sql server.仅在服务器上:
SELECT dbo.D100601RVDATABearingAllow
Run Code Online (Sandbox Code Playgroud)
到达.
我的EXFEL UDF:
Function RVDATA(Fastener) As Long
Dim cnt As ADODB.Connection
Dim rst As ADODB.Recordset
Dim Cmd1 As ADODB.Command
Dim stSQL As String
Const stADO As String = "Provider=SQLOLEDB.1;Data ................"
'----------------------------------------------------------
Set cnt = New ADODB.Connection
With cnt
.ConnectionTimeout = 3
.CursorLocation = adUseClient
.Open stADO
.CommandTimeout = 3
End With
'----------------------------------------------------------
Set Cmd1 = New ADODB.Command
Cmd1.ActiveConnection = cnt
Cmd1.CommandText = "dbo.D100601RVDATABearingAllow"
Cmd1.CommandType = adCmdStoredProc
'----------------------------------------------------------
Set Param1 = Cmd1.CreateParameter("Fastener", adInteger, adParamInput, 5)
Param1.Value …Run Code Online (Sandbox Code Playgroud) 我正在使用该方法从ADODB记录集更新excel表CopyFromRecordset.
更新后,数字显示为有数字列的日期.
到目前为止我使用的解决方法是通过VBA将列格式化为数字,但这不是一个好的解决方案,因为报告需要更长的时间才能完成.另外,我必须编写代码来容纳很多表.
有快速解决方案吗?任何帮助是极大的赞赏.
'Delete old data and copy the recordset to the table
Me.ListObjects(tblName).DataBodyRange.ClearContents
Me.Range(tblName).CopyFromRecordset rst
Run Code Online (Sandbox Code Playgroud)
tblName - 指的是保存与第一个数据具有相同格式/数据类型的数据的现有表