我必须将一些经典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没有看到这些变量cnn
,rst
,strTitle
3)现在我在Web.config中存储ConnectionString,所以我用以下代码替换了open
:
cnn.Open(System.Configuration.ConfigurationManager.ConnectionStrings("SQLConnectString").ConnectionString)
我还应该改变什么来修复它?任何建议=)谢谢
答案 0 :(得分:3)
您不在DotNet中使用ADODB。从技术上讲,你可以,但这不是办法。
您使用ADO.Net,IDataReaders,DataSet(松散或强类型,我更喜欢强类型)。
ASP.NET不是ASP。
不要心疼,我尝试的是同样的事情(虽然早在2002年)。 直到有人告诉我不同的方式。
这是一个教程......可能在适合你现在的位置。
答案 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#不允许您使用任何未声明的变量