2014-10-09 134 views
-1
<% 
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://stackoverflow.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

回答

-1
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

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 
+1

這就更好了。謝謝。我是新來的。 – user3541625 2014-10-09 12:19:03

+0

@ user3541625不要太用*接受按鈕觸發快樂*,有時需要一段時間讓人們開始離開答案*(有些人花更多時間在答案上,然後是其他人)*。 – Lankymart 2014-10-09 12:22:37