【问题标题】:ASP SQL Server ConnectionASP SQL 服务器连接
【发布时间】:2014-10-09 09:25:02
【问题描述】:
 <%
 DIM objConn
 Set objConn = Server.CreateObject("ADODB.Connection")
 objConn.ConnectionString = "Data Source=123.123.12.123,1234;Database=DatabaseName;User Id=Usernm;Password=abcd1234;"
 objConn.Open

 DIM mySQL

 mySQL = "SELECT * FROM [Users] WHERE [User ID]='1'"

 DIM objRS
 Set objRS = Server.CreateObject("ADODB.Recordset")
 objRS.open(mySQL, objConn)

 Response.Write objRS("FullName")

 objRS.Close
 Set objRS = Nothing
 objConn.Close
 Set objConn = Nothing
 %>

我想连接到 SQL Server 数据库,读取数据并关闭连接。我研究了这些例子并想出了这个。但它不工作。请指导我。我哪里错了?

【问题讨论】:

  • 您的 SQL 服务器的名称是什么?您应该使用它而不是 IP 和端口(正如 bummi 简洁地说的那样!)。此外,最好进行错误捕获以便捕获。查看this response
  • @Paul 我对使用 IP 和端口没有任何问题,这只是他们选择的方法。我确实有一个问题是连接字符串中的ProviderDriver 属性到底在哪里(您没有使用.NET Framework 数据提供程序)?查看SQL Server connection strings 以了解连接字符串应该如何格式化(基于提供者/驱动程序)。如果您使用 IP,还记得设置Network Library=DBMSSOCN如果您指定您使用的 SQL Server 版本,也可能会有所帮助。
  • IP 只是一个例子。我已将连接字符串更改为“Data Source=123.123.12.123,1234;Network Library=DBMSSOCN;Initial Catalog=Users;User Id=Usernm;Password=abcd1234;”但它仍然无法正常工作。有没有办法知道哪一行是错误?像在 Visual Basic 中一样?
  • 我正在使用 sql server 2008 数据库。

标签: sql sql-server asp-classic connection-string


【解决方案1】:

一些答案​​建议将逻辑包装到函数中,没有必要这样做。

这只是很多不需要的绒毛,只需使用ADODB.Command 对象。有数百种方法可以解决这个问题,但我发现一种方法可以一次又一次地工作,让ADODB.Command 对象完成工作,然后使用ADODB.Recordset 对象的.GetRows() 方法将结果返回到Array 中。 这样您就可以快速关闭ADODB.RecordsetADODB.Command 对象,只使用Array

Dim conn, cmd, rs, sql, data, search

'Assume value to query comes from a Request Collection.
search = Request("myvalue") & ""

conn = "Data Source=123.123.12.123,1234;Database=DatabaseName;User Id=Usernm;Password=abcd1234;"
sql = "select from mytable where this = ?"
Set cmd = Server.CreateObject("ADODB.Command")
With cmd
  'No need to handle connection let ADODB.Command create and destory it.
  .ActiveConnection = conn
  .CommandType = adCmdText
  .CommandText = sql
  .Parameters.Append(.CreateParameter("@myparam", adVarWChar, adParamInput, 50))
  .Parameters("@myparam").Value = search
  Set rs = .Execute()
  If Not rs.EOF Then data = rs.GetRows()
  Call rs.Close()
  Set rs = Nothing
End with
Set cmd = Nothing
'ADODB.Connection is closed when ADODB.Command is destroyed.

If IsArray(data) Then
  rows = UBound(data, 2)
  For row = 0 To rows
    'Return first column of the current row
    Call Response.Write("First Column of Row " & row & " is '" & data(0, row) & "'<br />"
  Next
Else
  Call Response.Write("No records")
End If

【讨论】:

  • 这样更好。谢谢。我是新手。
【解决方案2】:
Dim rs, dbConn

Function OpenDB()
    Set dbConn = Server.CreateObject("ADODB.Connection")
    dbConn.ConnectionTimeout = 300
    dbConn.CommandTimeout = 300
    dbConn.Open "Data Source=123.123.12.123,1234;Database=DatabaseName;User Id=Usernm;Password=abcd1234;"
End Function

Function CloseDB()
    Set rs = Nothing
    if ucase(TypeName(dbConn)) = "CONNECTION" then
        dbConn.Close
        Set dbConn = Nothing
    end if
End Function

Function OpenRecordSet(recset, tablename)
    Call OpenDB()
    Set recset = Server.CreateObject("ADODB.Recordset")
    recset.Open tablename, dbConn, 0, 1
End Function

Function CloseRecordSet(recset)
    Set recset = Nothing
    Call CloseDB()
End Function

然后使用

<%
Call OpenDB()
sql = "select from mytable where this = 'that'"
Set rs = dbConn.Execute(sql)
if not rs.EOF then
      ' do your stuff!
end if
Call CloseDB()
%>

http://www.shiningstar.net/articles/articles/database/datafunctions.asp?ID=AW

【讨论】:

  • 感谢您的快速回复。我是asp新手。我没有使用 asp.net。我正在用经典的 asp 编码。我将在哪里声明您提供的功能?在 中?对不起,如果这是一个愚蠢的问题,但我是新手。
  • 为什么要包装功能?,所有添加的打开和关闭绒毛都是不必要的。 That article 来自 2000 年 8 月!而且不是很好。
  • ... 因为我发现将其转储到包含中并让初级程序员在需要时使用 OpenDB 更容易。 GetRows 在某些情况下也很好,但不是全部
  • @JanuszJasinski 粗体声明,但您指的是哪些实例?底线ADODB.Recordset 是低效的内存消耗,除了识别记录上的元数据之外,我还没有发现ADODB.Recordset 的用途,这是无法通过数组完成的。这种做法让人偷懒,在页面顶部调用OpenDB()(甚至可能在#include),然后在页面底部添加CloseDB()。然后,ADODB.Connection 通常会在页面期间使用不必要的数据库连接打开。
  • OpenDB 和 CloseDB 在需要时也会被调用。有时我不知道列的顺序,因为它可能是随机的,所以除非你能启发我,否则不确定如何访问我想要的列!
猜你喜欢
  • 2014-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多