ASP SQL Server连接

问题描述:

<% 
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数据库,读取数据并关闭连接。我研究过这些例子,并提出了这个问题。但它不工作。请指导我。我哪里错了?ASP SQL Server连接

+0

什么是您的SQL服务器的名称?你应该使用这个而不是IP和端口(因为bummi已经简洁明了!)。此外,放入错误陷印是一个好主意,因此您可以捕捉。看看[这个回应](http://*.com/questions/26129183/passing-variables-in-classic-asp/26137258#26137258)。 – Paul 2014-10-09 10:12:22

+2

@Paul我没有使用IP和端口的问题,这只是他们选择的方法。我所遇到的一个问题是连接字符串(你没有使用.NET Framework数据提供程序)中的'Provider'或'Driver'属性在哪里,请看[SQL Server连接字符串](http:/ /www.connectionstrings.com/sql-server/)来查看连接字符串应该如何格式化*(基于提供者/驱动程序)*。如果您使用IP,请记住设置“Network Library = DBMSSOCN”。 **如果你指定了你正在使用的SQL Server版本,可能会有所帮助。** – Lankymart 2014-10-09 10:22:41

+0

IP只是一个例子。我已将连接字符串更改为“Data Source = 123.123.12.123,1234; Network Library = DBMSSOCN; Initial Catalog = Users; User Id = Usernm; Password = abcd1234;”但它仍然不起作用。有没有办法知道哪条线是错误的?像在视觉基础? – user3541625 2014-10-09 10:42:52

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

+0

感谢您的快速回复。我对asp很陌生。我没有使用asp.net。我正在编写经典的asp。我将在哪里宣布您提供的功能?在?对不起,如果这是一个愚蠢的问题,但我是新来的。 – user3541625 2014-10-09 10:52:35

+0

好吧,我明白了。许多非常感谢链接@Janusz – user3541625 2014-10-09 10:55:01

+0

为什么包装功能?,所有添加开幕式和闭幕式绒毛是不必要的。 [那篇文章](http://www.shiningstar.net/articles/articles/database/datafunctions.asp?ID=AW)来自2000年8月!而不是一个很好的。 – Lankymart 2014-10-09 12:29:29

一些答案建议包装逻辑到功能没有必要为此。

这只是很多绒毛,是不需要的,只需使用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 
+1

这就更好了。谢谢。我是新来的。 – user3541625 2014-10-09 12:19:03

+0

@ user3541625不要太用*接受按钮触发快乐*,有时需要一段时间让人们开始离开答案*(有些人花更多时间在答案上,然后是其他人)*。 – Lankymart 2014-10-09 12:22:37