将ADODB连接从ASP迁移到ASPX

时间:2014-04-17 19:23:25

标签: asp.net vb.net asp-classic migration adodb

我必须将一些经典ASP页面迁移到.NET。我已经解决了ASP App中使用的ADODB连接问题。以下是旧db.asp

的代码
<%
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
%>

我想在每个页面上使用此代码来连接到DB。知道我必须从代​​码中删除Option Explicit并将标题添加为<%@ Page Language="VB" %>我已将此代码复制到新的aspx页面,现在我收到了错误:

1)VS要求我在End Sub之前加Sub OpenDatabase(),但没有需要关闭的公开Sub

2)VS没有看到这些变量cnnrststrTitle

3)现在我在Web.config中存储ConnectionString,所以我用以下代码替换了open

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

我还应该改变什么来修复它?任何建议=)谢谢

2 个答案:

答案 0 :(得分:3)

您不在DotNet中使用ADODB。从技术上讲,你可以,但这不是办法。

您使用ADO.Net,IDataReaders,DataSet(松散或强类型,我更喜欢强类型)。

ASP.NET不是ASP。

不要心疼,我尝试的是同样的事情(虽然早在2002年)。 直到有人告诉我不同​​的方式。

这是一个教程......可能在适合你现在的位置。

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

答案 1 :(得分:0)

NET中的规则#1:连接字符串最好在web.config或其他配置文件中。或者在某些情况下在OS注册表中。

使用NET中每个页面中定义的连接字符串是安全,维护和许多其他原因的不良做法,最重要的是它显示了构建它的程序员的低资格。

规则#2。您可以使用内联SQL语句,但出于与规则#1相同的原因,这是一个坏主意。使用参数化存储过程,除非您在使用访问或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();
            }
}

您不需要Option Explicit,原因很简单:C#不允许您使用任何未声明的变量