首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

求教用户控件的解决方案

2013-02-24 
求教用户控件的求救!!!我写了一个DataBase.cs类用来连接数据库,更新,查询等的。有个:public static string

求教用户控件的
求救!!!

我写了一个DataBase.cs类用来连接数据库,更新,查询等的。
有个:
        public static string M_str_sqlcon = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=data\\data.mdb;Persist Security Info=True;Jet OLEDB:Database Password=1234";
用来做连接字符串。
一般在窗口控件“调用”这个类,做数据,查询什么的,都正常。

但是我做了个用户控件含dataGridView的,
在这个用户控件中“调用”这个类,正常。
但是把它拖到一般窗口实例化这个用户控件,就出错。
设置页面没正常显示出来,显示的是:
=====================================================
若要在加载设计器前避免可能发生的数据丢失,必须纠正以下错误:   
     1 个错误   
  
  忽略并继续   
    为什么会看到此页?   
   
   'C:\Windows\system32\data\data.mdb'不是一个有效的路径。 确定路径名称拼写是否正确,以及是否连接到文件存放的服务器。     
 》》》怎么相对路径会到了系统文件夹呢??????
       
此错误的实例(1)  
 
1。   显示调用堆栈  
 
在 System.Data.OleDb.OleDbConnectionInternal..ctor(OleDbConnectionString constr, OleDbConnection connection)
在 System.Data.OleDb.OleDbConnectionFactory.CreateConnection(DbConnectionOptions options, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningObject)
在 System.Data.ProviderBase.DbConnectionFactory.CreateNonPooledConnection(DbConnection owningConnection, DbConnectionPoolGroup poolGroup)
在 System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection)
在 System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory)
在 System.Data.OleDb.OleDbConnection.Open()
在 MJ.DataBase.getcon() 位置 F:\MJ\MJ\DataBase.cs:行号 105
在 MJ.DataBase.getDataSet(String SQLstr, String tableName) 位置 F:\MJ\MJ\DataBase.cs:行号 111
在 MJ.client_head.client_head_Load(Object sender, EventArgs e) 位置 F:\MJ\MJ\client_head.cs:行号 57
在 System.Windows.Forms.UserControl.OnLoad(EventArgs e)
在 System.Windows.Forms.UserControl.OnCreateControl()
在 System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)
在 System.Windows.Forms.Control.CreateControl()
在 System.Windows.Forms.Control.ControlCollection.Add(Control value)
在 System.Windows.Forms.Form.ControlCollection.Add(Control value)
在 System.Windows.Forms.Design.ControlDesigner.DesignerControlCollection.Add(Control c)  
   
有关此错误的帮助  
 
未能找到与此错误相关的帮助主题。 检查 Windows 窗体设计时错误列表   
 
   
有关此错误的论坛文章  
 
在 MSDN 论坛中搜索与此错误相关的文章   
 ===========================================
在 MJ.DataBase.getcon() 位置 F:\MJ\MJ\DataBase.cs:行号 105
是            My_con = new OleDbConnection(M_str_sqlcon);
            My_con.Open();

在 MJ.client_head.client_head_Load(Object sender, EventArgs e) 位置 F:\MJ\MJ\client_head.cs:行号 57
是调用DataBase.cs的方法。
 
用户控件 类
[解决办法]
有时我也在debug目录转到release目录也发生过这个问题,我都是增加Application.StartupPath来解决
类似
public static string M_str_sqlcon = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+Application.StartupPath+"\\data\\data.mdb;Persist Security Info=True;Jet OLEDB:Database Password=1234";


[解决办法]

引用:
我想会不会是VS2010的bug?打个VS2010sp1看看!!

怎么可能是bug?是你自己没理解那些环境变量的原理,你exe文件就没启动,仅仅是IDE在加载控件,IDE的启动路径就是VS2010的安装路径,和你的项目完全无关。而你就算DataBase.AppPath=“f:\\MJ\\”;,那个也是在public static string M_str_sqlcon之后执行的,你根本没搞清楚变量的初始化顺序。
比如我写这段代码:
public string AppPath="";
public static string M_str_sqlcon = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + AppPath + "\\data\\data.mdb;Persist Security Info=True;Jet OLEDB:Database Password=1234"; 

AppPath=“f:\\MJ\\”;

你觉得这样对AppPath赋值有用吗?

热点排行