当前位置:编程学习 > C#/ASP.NET >>

ConnectionString 属性尚未初始化。

被调用的方法: 
public DataSet SelectToDataSet(string SQL, string subtableName)
    {
        OleDbDataAdapter adapter = new OleDbDataAdapter();
        OleDbCommand command = new OleDbCommand(SQL, Conn);
        adapter.SelectCommand = command;
        DataSet Ds = new DataSet();
        adapter.Fill(Ds, subtableName);
        return Ds;
    }

sql语句:select top 20 [ID] from [Zk_User] where 1=1 order by [ID] Desc

执行句:DataSet ds = db.SelectToDataSet(sql1,"table");

两次执行,执行句之后就会报ConnectionString 属性尚未初始化。
我的连接数据库类:
public class AccessDb
{
    public OleDbConnection Conn;
    public string ConnString;//连接字符串
    public AccessDb()
    {
        ConnString = "Provider=Microsoft.Jet.OleDb.4.0;Data Source=";
        ConnString += HttpContext.Current.Server.MapPath("~/database/datadat.mdb");
        Conn = new OleDbConnection(ConnString);
        Conn.Open();
    }
//。。。。。

} --------------------编程问答-------------------- 你跟踪一下Conn.ConnectionString 是否为空 --------------------编程问答-------------------- ConnectionString 属性尚未初始化 --------------------编程问答-------------------- 第一次执行没问题的,第二次在次执行就开始报错误了。
错误异常:
源错误: 


行 65:         DataSet Ds = new DataSet();
行 66:         //Ds.Tables.Add(subtableName);
行 67:         adapter.Fill(Ds, subtableName);
行 68:         return Ds;
行 69:     }
 

源文件: f:\web\net\App_Code\AccessDb.cs    行: 67 

堆栈跟踪: 


[InvalidOperationException: ConnectionString 属性尚未初始化。]
   System.Data.OleDb.OleDbConnection.PermissionDemand() +996487
   System.Data.OleDb.OleDbConnectionFactory.PermissionDemand(DbConnection outerConnection) +20
   System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory) +117
   System.Data.OleDb.OleDbConnection.Open() +40
   System.Data.Common.DbDataAdapter.QuietOpen(IDbConnection connection, ConnectionState& originalState) +31
   System.Data.Common.DbDataAdapter.FillInternal(DataSet dataset, DataTable[] datatables, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior) +112
   System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior) +287
   System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, String srcTable) +92
   AccessDb.SelectToDataSet(String SQL, String subtableName) in f:\web\net\App_Code\AccessDb.cs:67
   ExecuteSql.getRecord(String table, String Hql, String order, Int32 currentindex, Int32 pagesize, String mainkey) in f:\web\net\App_Code\ExecuteSql.cs:74
   admin_admin_ManPeoUser.bind() in f:\web\net\admin\admin_ManPeoUser.aspx.cs:36
   admin_admin_ManPeoUser.AspNetPager1_PageChanging(Object src, PageChangingEventArgs e) in f:\web\net\admin\admin_ManPeoUser.aspx.cs:74
   Wuqi.Webdiyer.AspNetPager.OnPageChanging(PageChangingEventArgs e) +144
   Wuqi.Webdiyer.AspNetPager.OnLoad(EventArgs e) +429
   System.Web.UI.Control.LoadRecursive() +50
   System.Web.UI.Control.LoadRecursive() +141
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +627

 

--------------------编程问答-------------------- 第一步:申请链接
SqlConnection con = new SqlConnection(strConnection);
第二步:申请执行对象
SqlCommand com = new SqlCommand(strSql, con);
第三步:做想做的数据库操作
还是回去把理论学习学习再来问吧。书都不看问什么...


string strConnection = "server=.;database=student;uid=sa;pwd=sa";
SqlConnection con = new SqlConnection(strConnection);
SqlCommand com = new SqlCommand(strSql, con);
con.Open();
//下面做你要做的数据库操作  --------------------编程问答-------------------- 断点调试,看Con是否为Null
--------------------编程问答-------------------- 保证ConnectionString 有值 断点跟一下看! --------------------编程问答-------------------- 你只贴了创建connnection的片段和sql访问的片段 其他地方怎么调用的不清楚,你是否在调用完有明确的关闭连接?而下次调用的时候没有重新打开连接?如果都不是你还是具体自己调试下吧,问题很明显第二次connection 为null 自己断点调试 ,监视连接变量看下 --------------------编程问答-------------------- 如何初始化呢?  上面已经有了连接字符串了,怎么初始化ConnectionString --------------------编程问答-------------------- Conn的构造函数需要连接字符串 断点过去看看 --------------------编程问答--------------------
引用 7 楼 blue_maple 的回复:
你只贴了创建connnection的片段和sql访问的片段 其他地方怎么调用的不清楚,你是否在调用完有明确的关闭连接?而下次调用的时候没有重新打开连接?如果都不是你还是具体自己调试下吧,问题很明显第二次connection 为null 自己断点调试 ,监视连接变量看下


是的 第一次取到了连接字符串,在一次执行的时候就也不是空   错误是:ConnectionString = 由于以前的函数求值超时,函数求值被禁用。必须继续执行才能重新启用函数求值。 --------------------编程问答--------------------
引用 6 楼 zjx198934 的回复:
保证ConnectionString 有值 断点跟一下看!


conn不为空   ConnectionString = 由于以前的函数求值超时,函数求值被禁用。必须继续执行才能重新启用函数求值。   这是什么原因导致的。。。 --------------------编程问答-------------------- 你的错误我也搜索了下 没有得到合适的答案 你这样先试下把connectionstring给成固定的路径文件,然后看看会不会有这个问题我只是怀疑 “HttpContext.Current.Server.MapPath("~/database/datadat.mdb");” 这段 但不十分肯定 你试下固定路径 --------------------编程问答--------------------
引用 12 楼 blue_maple 的回复:
你的错误我也搜索了下 没有得到合适的答案 你这样先试下把connectionstring给成固定的路径文件,然后看看会不会有这个问题我只是怀疑 “HttpContext.Current.Server.MapPath("~/database/datadat.mdb");” 这段 但不十分肯定 你试下固定路径



改了之后  ServerVersion = “Conn.ServerVersion”引发了“System.InvalidOperationException”类型的异常         conn为空了
--------------------编程问答-------------------- 不是 ,我意思是你先随便用这样 Provider=Microsoft.Jet.OleDb.4.0;Data Source=d:\database\datadat.mdb"这样固定的access路径而不是用程序中动态获取当前程序运行所在目录的路径 先这样试试connection看还会异常不会 --------------------编程问答-------------------- Conn.open();

--------------------编程问答-------------------- 我也遇到了这样的问题   也在寻求方案中
补充:.NET技术 ,  ASP.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,