各位大虾,我用vs2005做个项目,分成了两层,一层是表现层,也就是网页,另一个是数据访问层,我做的是asp.net web服务项目来支持数据的调用。我在web服务里面建立了一个ConnFactory.config文件,在这里面做数据库的连接,代码如下:
Code
<?xml version="1.0" encoding="utf-8"?>
<!--
注意: 除了手动编辑此文件以外,您还可以使用
Web 管理工具来配置应用程序的设置。可以使用 Visual Studio 中的
“网站”->“Asp.Net 配置”选项。
设置和注释的完整列表在
machine.config.comments 中,该文件通常位于
\Windows\Microsoft.Net\Framework\v2.x\Config 中
-->
<configuration>
<appSettings>
<add key = "connstring" value = "server=localhost;database = SungTeuk;uid = teuk;pwd = sungteuk"/>
</appSettings>
<system.web>
<!--
设置 compilation debug="true" 将调试符号插入
已编译的页面中。但由于这会
影响性能,因此只在开发过程中将此值
设置为 true。
-->
<compilation debug="false" />
<!--
通过 <authentication> 节可以配置 ASP.NET 使用的
安全身份验证模式,
以标识传入的用户。
-->
<authentication mode="Windows" />
<!--
如果在执行请求的过程中出现未处理的错误,
则通过 <customErrors> 节可以配置相应的处理步骤。具体说来,
开发人员通过该节可以配置
要显示的 html 错误页
以代替错误堆栈跟踪。
<customErrors mode="RemoteOnly" defaultRedirect="GenericErrorPage.htm">
<error statusCode="403" redirect="NoAccess.htm" />
<error statusCode="404" redirect="FileNotFound.htm" />
</customErrors>
-->
</system.web>
</configuration>
我觉得这段连接数据库的代码没有问题,接下来我在一个class文件中开始调用这个数据库连接,代码如下:
Code
using System;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
/// <summary>
/// ConFactory 的摘要说明
/// </summary>
public class ConFactory
{
public ConFactory()
{
}
SqlConnection con = null;
/// <summary>
/// 数据库连接
/// </summary>
public SqlConnection GetConn()
{
try
{
string strCon = ConfigurationSettings.AppSettings["connstring"];
con = new SqlConnection(strCon);
if (con.State == ConnectionState.Closed)
{
con.Open();
}
}
catch (SqlException ex)
{
}
return con;
}
}
这段代码我也没有看出问题来,但是在运行的时候会抛出一个异常,我在表现层里面添加了web引用,在web服务的项目里面有个.asmx文件,web引用里面正是引用了这个文件。同时,我把上面这段调用web.config文件的代码换成正常的在类里面写的连接数据库的代码之后就能在网页里面正常显示出查询的数据来,但是调用web.config中的数据库连接就会有异常,因为换一种连接就能显示,所以我的数据查询部分的代码是没有问题的。下面是抛出的异常:
Code
用户代码未处理 System.Web.Services.Protocols.SoapException
Message="System.Web.Services.Protocols.SoapException: 服务器无法处理请求。
---> System.InvalidOperationException: ConnectionString 属性尚未初始化。\n
在 System.Data.SqlClient.SqlConnection.PermissionDemand()\n
在 System.Data.SqlClient.SqlConnectionFactory.PermissionDemand(DbConnection outerConnection)\n
在 System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory)\n
在 System.Data.SqlClient.SqlConnection.Open()\n
在 ConFactory.GetConn()\n
在 News_Information.getAllNews()\n
在 SungService.getAllNews()\n --- 内部异常堆栈跟踪的结尾 ---"
Source="System.Web.Services"
Actor=""
Lang=""
Node=""
Role=""
StackTrace:
在 System.Web.Services.Protocols.SoapHttpClientProtocol.ReadResponse(SoapClientMessage message, WebResponse response, Stream responseStream, Boolean asyncCall)
在 System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(String methodName, Object[] parameters)
在 WebSungServer.SungService.getAllNews() 位置 c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\sungteuk\18b79f29\ee7f863\App_WebReferences.dqex8yfd.0.cs:行号 90
在 shownews.Page_Load(Object sender, EventArgs e) 位置 g:\SungTeuk\shownews.aspx.cs:行号 21
在 System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e)
在 System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e)
在 System.Web.UI.Control.OnLoad(EventArgs e)
在 System.Web.UI.Control.LoadRecursive()
在 System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
不知道我表述明白没有,还望大虾赐教~~谢谢!!