在一个页面中,我是这么连接数据库的,有时候打开数据库时报错,有时候又可以,请高手给予指点。
具体实现代码如下:
webconfig中我是这么写的<configuration>
<appSettings>
<add key="conn" value="Server=(local);Database=szsyb;uid=sa;pwd=sa">
</add>
</appSettings>
页面中的代码如下:
protected static string mycon=System.Configuration .ConfigurationSettings .AppSettings ["conn"].ToString ();
public SqlConnection conn=new SqlConnection (mycon);
中间有些代码省略.......
string SelectStr = "Select * from tbl_user where username = '" + NAME
+ "' and pwd = '" + PWD + "'";
conn.Open();
DataSet ds=new DataSet ();
SqlDataAdapter da=new SqlDataAdapter (SelectStr,conn);
da.Fill(ds,"tbl_user");
conn.Close ();
if(ds.Tables["tbl_user"].Rows .Count== 0)
{
Response.Write("<script language = javascript> alert('您输入的用户名/密码不正确!');</script>");
}
我断点调试发现运行到conn.Open();时报错,
源错误:
行 129: string SelectStr = "Select * from tbl_user where username = '" + NAME
行 130: + "' and pwd = '" + PWD + "'";
行 131: conn.Open();
行 132: DataSet ds=new DataSet ();
行 133: SqlDataAdapter da=new SqlDataAdapter (SelectStr,conn);
源文件: d:\szsyb\login.ascx.cs 行: 131 堆栈跟踪:
[NullReferenceException: 未将对象引用设置到对象的实例。]
LoadLibraryW(UInt16* ) +0
System.EnterpriseServices.Thunk.Security.Init() +76
System.EnterpriseServices.Thunk.Security.SuspendImpersonation() +81
System.EnterpriseServices.Platform.Initialize() +497
System.EnterpriseServices.ResourcePool..ctor(TransactionEndDelegate cb) +11
System.Data.SqlClient.ConnectionPool..ctor(DefaultPoolControl ctrl) +797
System.Data.SqlClient.PoolManager.FindOrCreatePool(DefaultPoolControl ctrl) +170
System.Data.SqlClient.SqlConnectionPoolManager.GetPooledConnection(SqlConnectionString options, Boolean& isInTransaction) +358
System.Data.SqlClient.SqlConnection.Open() +384
szsyb.login.BT_Submit_Click(Object sender, EventArgs e) in d:\szsyb\login.ascx.cs:131
System.Web.UI.WebControls.Button.OnClick(EventArgs e) +108
System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +57
System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +18
System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +33
System.Web.UI.Page.ProcessRequestMain() +1277
具体实现代码如下:
webconfig中我是这么写的<configuration>
<appSettings>
<add key="conn" value="Server=(local);Database=szsyb;uid=sa;pwd=sa">
</add>
</appSettings>
页面中的代码如下:
protected static string mycon=System.Configuration .ConfigurationSettings .AppSettings ["conn"].ToString ();
public SqlConnection conn=new SqlConnection (mycon);
中间有些代码省略.......
string SelectStr = "Select * from tbl_user where username = '" + NAME
+ "' and pwd = '" + PWD + "'";
conn.Open();
DataSet ds=new DataSet ();
SqlDataAdapter da=new SqlDataAdapter (SelectStr,conn);
da.Fill(ds,"tbl_user");
conn.Close ();
if(ds.Tables["tbl_user"].Rows .Count== 0)
{
Response.Write("<script language = javascript> alert('您输入的用户名/密码不正确!');</script>");
}
我断点调试发现运行到conn.Open();时报错,
源错误:
行 129: string SelectStr = "Select * from tbl_user where username = '" + NAME
行 130: + "' and pwd = '" + PWD + "'";
行 131: conn.Open();
行 132: DataSet ds=new DataSet ();
行 133: SqlDataAdapter da=new SqlDataAdapter (SelectStr,conn);
源文件: d:\szsyb\login.ascx.cs 行: 131 堆栈跟踪:
[NullReferenceException: 未将对象引用设置到对象的实例。]
LoadLibraryW(UInt16* ) +0
System.EnterpriseServices.Thunk.Security.Init() +76
System.EnterpriseServices.Thunk.Security.SuspendImpersonation() +81
System.EnterpriseServices.Platform.Initialize() +497
System.EnterpriseServices.ResourcePool..ctor(TransactionEndDelegate cb) +11
System.Data.SqlClient.ConnectionPool..ctor(DefaultPoolControl ctrl) +797
System.Data.SqlClient.PoolManager.FindOrCreatePool(DefaultPoolControl ctrl) +170
System.Data.SqlClient.SqlConnectionPoolManager.GetPooledConnection(SqlConnectionString options, Boolean& isInTransaction) +358
System.Data.SqlClient.SqlConnection.Open() +384
szsyb.login.BT_Submit_Click(Object sender, EventArgs e) in d:\szsyb\login.ascx.cs:131
System.Web.UI.WebControls.Button.OnClick(EventArgs e) +108
System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +57
System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +18
System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +33
System.Web.UI.Page.ProcessRequestMain() +1277
DataSet ds=new DataSet ();
SqlDataAdapter da=new SqlDataAdapter (SelectStr,conn);
da.Fill(ds,"tbl_user");
conn.Close ();
里面本来就可以不显示Open和Close的.
你先删除看哪里还有错?
未将对象引用设置到对象的实例。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.NullReferenceException: 未将对象引用设置到对象的实例。源错误:
行 132: DataSet ds=new DataSet ();
行 133: SqlDataAdapter da=new SqlDataAdapter (SelectStr,conn);
行 134: da.Fill(ds,"tbl_user");
行 135: if(ds.Tables["tbl_user"].Rows .Count== 0)
源文件: d:\szsyb\login.ascx.cs 行: 134 堆栈跟踪:
[NullReferenceException: 未将对象引用设置到对象的实例。]
LoadLibraryW(UInt16* ) +0
System.EnterpriseServices.Thunk.Security.Init() +76
System.EnterpriseServices.Thunk.Security.SuspendImpersonation() +81
System.EnterpriseServices.Platform.Initialize() +497
System.EnterpriseServices.ResourcePool..ctor(TransactionEndDelegate cb) +11
System.Data.SqlClient.ConnectionPool..ctor(DefaultPoolControl ctrl) +797
System.Data.SqlClient.PoolManager.FindOrCreatePool(DefaultPoolControl ctrl) +170
System.Data.SqlClient.SqlConnectionPoolManager.GetPooledConnection(SqlConnectionString options, Boolean& isInTransaction) +358
System.Data.SqlClient.SqlConnection.Open() +384
System.Data.Common.DbDataAdapter.QuietOpen(IDbConnection connection, ConnectionState& originalState)
System.Data.Common.DbDataAdapter.FillFromCommand(Object data, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior)
System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior)
System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, String srcTable)
szsyb.login.BT_Submit_Click(Object sender, EventArgs e) in d:\szsyb\login.ascx.cs:134
System.Web.UI.WebControls.Button.OnClick(EventArgs e) +108
System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +57
System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +18
System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +33
System.Web.UI.Page.ProcessRequestMain() +1277
1、请检查mycon
2、Server=(local);改成Server=127.0.0.1;试试
如果一到那个地方就报错问题还好找,时好时坏就郁闷了,重启后就坏了应该是数据库服务没有启动,设成自动启动。虽然可以用查询分析查询但还是看下服务。如果报错了,先不要动什么,检查一遍,如果好了看看和报错时候有没有什么地方不同。
<add key="conn" value="user id=sa;data source=.;initial catalog=szsyb;pwd=sa"/>
2.安装SP1/SP2补丁。
3.WebConfig检查。
改成
protected static string mycon = System.Configuration.ConfigurationManager.AppSettings["conn"].ToString( );
看看行不~
SqlConnection conn=new SqlConnection(ConfigurationManager.ConnectionStrings["conn"].ConnectionString);
<appSettings>
<add key="conn" value="Server=(local);Database=szsyb;uid=sa;pwd=sa">
</add>
</appSettings> 是不能用
ConfigurationManager.ConnectionStrings
获取的