2011-04-24 139 views
1

下面是我用來將一些數據插入到SQL Server數據庫的簡單asp代碼。它給出了下面的錯誤。有人可以看一下,讓我知道這個代碼的錯誤? •網站正在維護經典ASP和SQL Server Express 2005

<html> 
    <head> 
     <title>Address Book Insertion</title> 
    </head> 
    <body> 
<% 

    set connection=Server.CreateObject("ADODB.Connection") 
    connection.Open "Provider=SQLOLEDB;Server=charithj-pc;Integrated Security=SSPI;Initial Catalog=AddressDB;" 

    cmd =  "INSERT INTO AddressBook (FirstName, Surname, Address) VALUES ('" 
    cmd = cmd & Request("FirstName") & "','" 
    cmd = cmd & Request("Surname") & "','" 
    cmd = cmd & Request("Address") & "')" 

    Response.Write(cmd) 

    on error resume next 
    connection.Execute cmd 
    if err <> 0 then 
     Response.Write("Insertion failed") 
    else 
     Response.Write("Insertion successful") 
    end if 
    connection.close 
%> 
    </body> 
</html> 

網站無法顯示該頁面

HTTP 500

最可能的原因。

•網站有編程錯誤。

+0

你確定你的連接字符串是正確的嗎?服務器名稱看起來不像SQL Server Express實例名稱。 – Oded 2011-04-24 09:08:09

+0

我建議在錯誤恢復下移除 這可能有助於更快找到問題。 – NickD 2011-04-24 09:19:43

+0

無論如何,爲什麼不使用SQL Server Express 2008 R2? 2005已過時 – abatishchev 2011-04-25 07:07:17

回答

3

進入您的瀏覽器,我認爲它是Internet Explorer並禁用「顯示友好的http錯誤」。這有助於您查看真實的錯誤消息。

btw。你的代碼允許sql注入。使用sql參數或替換一些字符,如單引號等

+0

對於sql注入+1 - 串連字符串與來自用戶的輸入並執行它們作爲命令是這樣的BAD – stalker 2011-04-24 09:14:48

+0

另一點,我假設來自iis的應用程序池無權訪問數據庫。默認它可能是網絡服務。 – NickD 2011-04-24 09:37:13

2

關於關閉友好的HTTP錯誤,刪除錯誤恢復和照顧SQL注入的觀點都是正確的,你應該在我們去之前做到這一點遠遠地猜測什麼是錯誤的,但有一件事在你的VB腳本代碼中很突出(這是在<% %>中ASP嵌入的語言)。

這就是您使用Response.Write()。

這樣做是否允許代碼將輸出返回到瀏覽器。當你有該行時:

Response.Write(cmd) 

您正在將cmd對象的字符串表示形式發送回瀏覽器。這很容易破壞頁面的服務器端創建。建議


兩個一般性件讓你更好的工作:

  • 爲所有,但最瑣碎的網頁通常最好從ASP頁面刪除代碼,並把它變成一個獨立的libary,然後ASP頁面調用。這對於數據訪問代碼來說當然是明智的。

  • 測試時,您的VB腳本代碼不需要用完ASP頁面,您可以將腳本複製到文本文件中。重命名該文件.vbs,你應該能夠通過雙擊運行VB腳本。我總是發現通過一個錯誤工作更方便。

+0

我想要的是,你需要一個命令對象,但你可以直接使用連接對象。他沒有明確地定義選項,所以cmd是一個簡單的字符串。 – NickD 2011-04-24 09:33:28

+0

哎呀,對了,我會把那部分拿出來。 – 2011-04-24 09:35:30

+0

@Snoopy此外,做response.write不應該導致問題。我想我們拭目以待真正的錯誤是:) – 2011-04-24 09:39:12

1

這是現在的錯誤,我得到的。 Microsoft OLE DB Provider for SQL Server錯誤 '80004005'無法打開登錄請求的數據庫 「AddressDB」。 登錄失敗。 /AddressBook/Insert.asp,9號線 -

可嘗試使用SQL身份驗證,請參見連接字符串是在這裏:www.connectionstrings。COM/ 或更改安全設置:

http://msdn.microsoft.com/en-us/library/2xzyzb0f.aspx