2014-04-17 123 views
1

我必須將一些經典ASP頁面遷移到.NET。我遇到了ASP應用程序中使用的ADODB連接問題。下面是我想每一頁上使用此代碼連接到數據庫的舊db.asp將ADODB連接從ASP遷移到ASPX

<% 
Option Explicit 

' Declare variables... 
Dim cnn ' ADO connection 
Dim rst ' ADO recordset 
Dim strTitle 'Title for each page 

Sub OpenDatabase() 
    ' Create an ADO Connection. 
    Set cnn = Server.CreateObject("ADODB.Connection") 

    ' We're using SQL Server connection string 
    cnn.Open Session("SQLConnectString") 
    cnn.CommandTimeout = 0 
    Server.ScriptTimeout = 3000 

    ' Create an ADO Recordset object 
    Set rst = Server.CreateObject("ADODB.Recordset") 
End Sub 

Sub RunSQL(strSQL)   
    'Open a recordset from the strSQL. 
    rst.Open strSQL, cnn 

End Sub 

Sub CloseDatabase() 
    rst.Close 
    Set rst = Nothing 
    cnn.Close 
    Set cnn = Nothing 
End Sub 
%> 

的代碼。知道我必須從我的代碼刪除Option Explicit,並添加標題爲<%@ Page Language="VB" %>我複製此代碼到新的aspx頁面,現在我得到錯誤:

1)VS問我Sub OpenDatabase()之前把End Sub,但沒有打開Sub需要關閉。

2)VS沒有看到這些變量cnnrststrTitle

3)現在我存儲的ConnectionString在Web.config中,所以我把它換成open用下面的代碼:

cnn.Open(System.Configuration.ConfigurationManager.ConnectionStrings("SQLConnectString").ConnectionString) 

我還應該改變什麼來修復它?任何建議=)謝謝

回答

3

你不要在DotNet中使用ADODB。從技術上講,你可以,但這不是要做的。

您使用ADO.Net,IDataReaders,數據集(鬆或強類型的,我更喜歡強類型)。

ASP.NET不是ASP。

不要難過,我是想你是同樣的事情(儘管,他在2002年)。直到有人以不同的方式告訴我。

這裏是一個教程...可能在正確的水平上你現在的位置。在NET

http://www.aspsnippets.com/Articles/Difference-between-ExecuteReader-ExecuteScalar-and-ExecuteNonQuery.aspx

+0

您能否提供代碼示例,它與我現在的功能相同?謝謝。打開連接,執行SQL,關閉連接 – Bryuk

+0

我不知道你的strSql是什麼。你在選擇嗎?更新或插入?還是刪除?這取決於。 – granadaCoder

+0

我編輯了我的答案。 – granadaCoder

0

規則#1:連接字符串最好在web.config或其他配置文件。或者在某些情況下在OS註冊表中。

使用NET在每一個頁面中定義的連接字符串是從其他原因的安全,維護和很多,不僅如此,它顯示誰建造它程序員的低資質頂部不好的做法。

規則#2。您可以使用內聯SQL語句,但出於與規則#1相同的原因,這是一個壞主意。使用參數化存儲過程,除非您在使用Access或Excel或純文本文件作爲數據存儲時沒有任何類似的情況。

因此,在您web.config你應該有下面的條目:

<connectionStrings> 
    <add name="DBCS" 
     connectionString="Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|ProjectDatabases.mdf;Integrated Security=True;User Instance=True" 
     providerName="System.Data.SqlClient" /> 
</connectionStrings> 

然後在你的代碼中調用

Public void main() 
{ 
    String CONN 
    String SQLString 
CONN = String.Format(ConfigurationManager.ConnectionStrings["DBCS"].ConnectionString, rootPath); 
SQLString=/// your stored procedure and parameters if any 
SqlCommand cmd = new SqlCommand(); 
cmd.CommandType = CommandType.StoredProcedure; 
cmd = new SqlCommand(SQLString), CONN); 
CONN.Open(); 
SqlDataReader reader = cmd.ExecuteReader(); 

/// do what ever you need to work with your data like build a string, html document etc 
closeConn(); 
} 

public void closeConn() 
{ 
      if (reader != null) 
      { 
       reader.Close(); 
      } 

      if (CONN!= null) 
      { 
       CONN.Close(); 
      } 
} 

你並不需要顯式的選項進行簡單的理由:C#不會讓你使用任何未聲明的變量