【问题标题】:Creating dynamic ADODB connections in Classic ASP在经典 ASP 中创建动态 ADODB 连接
【发布时间】:2016-05-16 14:37:03
【问题描述】:

我有一个数据库连接字符串列表,即数据库名称。这些数据库具有相同的表结构。我正在尝试做的是动态创建一个连接,添加/删除/修改一个表,但是,如果在任何地方弹出错误,然后是 RollbackTrans,否则,CommitTrans。

让我走上正确道路的基本问题是:

此代码是否可以在经典 ASP 中进行动态命名连接?

'create the dynamic object
execute("Set Con" & index & " = Server.CreateObject(""ADODB.connection"")")
'connect to the dynamic object
execute("Con" & index & ".Open " & DBString(index))

我得到的错误是'Expected end of statement'.open 行(最后一个)

【问题讨论】:

  • DBString() 函数在做什么?它不是内置函数。
  • 只有连接字符串会有所不同,它是一个字符串,因此只需重新分配连接对象 .ConnectionString 属性并根据需要断开/重新连接或将其提供给函数。无需在字符串中执行/评估 VBScript。
  • 您使用的是什么 RDMS? (MySQL、SQL Server 等)。
  • @AlexK。同意,但看起来 OP 正在尝试构建多个动态构建的 ADODB.Connection 对象,问题是为什么?事实上,为什么您甚至需要更改连接字符串?例如,如果他们使用 SQL Server,它可以使用相同的连接来枚举您命名的所有数据库、表、视图。
  • DBString() 是我的连接字符串(要连接的驱动程序、un、pw、db)。我正在连接到 MySQL 和 SQL Server。 DBString() 是一个连接字符串数组。我有多个具有相同结构(布局)的数据库。当我将表添加到一个数据库时,我希望它添加到所有数据库中。如果任何地方发生错误,我想退出任何更改并报告错误。

标签: asp-classic adodb


【解决方案1】:

这可能会奏效:只需使用连接字符串数组即可。从这里您可以创建一个连接数组。然后你可以遍历这个数组并将你的命令发送到不同的数据库。

  dim connectionStrings(1)
  dim connections(1)
  dim curConn

  connectionStrings(0) = "Provider=sqloledb;Server=.\EXPRESS2012;Database=master;uid=youruser;pwd=yourpwd"
  connectionStrings(1) = "Provider=sqloledb;Server=.\EXPRESS2012;Database=model;uid=youruser;pwd=yourpwd"

  for curConn = 0 to ubound( connectionStrings)
    set connections(curConn) = Server.CreateObject("ADODB.Connection")
    connections(curConn).Open connectionStrings(curConn)
  next

  dim cmd : cmd = "select @@servername, db_name()"
  for curConn = 0 to ubound( connectionStrings)
    dim rs
    set rs = connections(curConn).Execute( cmd)
    Response.write( rs( 0) & ":" & rs(1) & "<br />")
    rs.close
    set rs = nothing
  next


  for curConn = 0 to ubound( connectionStrings)
    call connections(curConn).Close
    set connections(curConn) = nothing
  next

【讨论】:

  • 谢谢。我什至没有想过将所有这些都转储到一个数组中。非常好。
  • @EglCode 为什么这么好?它将通过具有多个连接来产生开销,您可以从一个连接中完成所有这些操作,而不必在连接字符串中切换数据库。但是,由于您不回答问题,因此试图帮助您是毫无意义的。
  • @Lankymart,很抱歉我的回复时间不符合您的期望,请假一周。如果我关闭连接,则无法退出或取消交易。假设在最后一个连接上,我收到一个错误,我希望能够取消对其他数据库的所有其他更改。
【解决方案2】:

Mysql 动态连接字符串,示例为 t=1 到 4,四种不同的数据库连接 conns(t)


dim conns(4)

Set Conns(1)=Server.Createobject("ADODB.Connection")

Conns(1).Open "DRIVER={MySQL ODBC 3.51 Driver}; SERVER=localhost;port=3306;DATABASE=dbname;UID=root;PASSWORD=pass;OPTION=3"
Conns(1).Execute "SET NAMES 'latin5'"
Conns(1).Execute "SET CHARACTER SET latin5"
Conns(1).Execute "SET COLLATION_CONNECTION = 'latin5_turkish_ci'"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-24
    • 2020-10-24
    • 1970-01-01
    • 2022-06-17
    • 2015-05-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多