在一个页面中,我是这么连接数据库的,有时候打开数据库时报错,有时候又可以,请高手给予指点。
具体实现代码如下:
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 

解决方案 »

  1.   

    顺便再说一下,我用的是vs2003 和sql 2000
      

  2.   

    conn.Open(); 
    DataSet ds=new DataSet (); 
    SqlDataAdapter da=new SqlDataAdapter (SelectStr,conn); 
    da.Fill(ds,"tbl_user"); 
    conn.Close (); 
    里面本来就可以不显示Open和Close的.
    你先删除看哪里还有错?
      

  3.   

    如果删除conn.open()这一句,也同样报错
    未将对象引用设置到对象的实例。 
    说明: 执行当前 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 
      

  4.   

    conn.open();是必须的
    1、请检查mycon
    2、Server=(local);改成Server=127.0.0.1;试试
      

  5.   

    Server=.
    如果一到那个地方就报错问题还好找,时好时坏就郁闷了,重启后就坏了应该是数据库服务没有启动,设成自动启动。虽然可以用查询分析查询但还是看下服务。如果报错了,先不要动什么,检查一遍,如果好了看看和报错时候有没有什么地方不同。
      

  6.   

    试试这个呢:
    <add key="conn" value="user id=sa;data source=.;initial catalog=szsyb;pwd=sa"/>
      

  7.   

    1.page add this:EnableViewState=false。
    2.安装SP1/SP2补丁。
    3.WebConfig检查。
      

  8.   

    1.page add this:EnableViewState=false。这一条是什么意思啊?能否说的详细点,另外sp1/SP2是指什么的补丁(数据库还是系统)?
      

  9.   

    protected static string mycon=System.Configuration .ConfigurationSettings .AppSettings ["conn"].ToString (); 
    改成
    protected static string mycon = System.Configuration.ConfigurationManager.AppSettings["conn"].ToString( );
    看看行不~
      

  10.   

     感觉你的链接写的有写不规范,你试试我写的这个链接字符串:
    SqlConnection conn=new SqlConnection(ConfigurationManager.ConnectionStrings["conn"].ConnectionString);
      

  11.   

    Web.config 中的
    <appSettings>
    <add key="conn" value="Server=(local);Database=szsyb;uid=sa;pwd=sa">
    </add>
    </appSettings>  是不能用
    ConfigurationManager.ConnectionStrings 
    获取的