求教用户控件的

romnyroy 2013-02-16 10:51:35
求救!!!

我写了一个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的方法。

...全文
336 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
romnyroy 2013-02-17
  • 打赏
  • 举报
回复
引用 14 楼 qldsrx 的回复:
这样写倒是可以,通过属性的get方法返回动态的字符串。 C# code?12345678910public string AppPath="";public static string M_str_sqlcon { get { return @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + ……
暂时用不上这样,先记住,谢谢!
romnyroy 2013-02-17
  • 打赏
  • 举报
回复
引用 13 楼 qldsrx 的回复:
引用 11 楼 romnyroy 的回复:我想会不会是VS2010的bug?打个VS2010sp1看看!! 怎么可能是bug?是你自己没理解那些环境变量的原理,你exe文件就没启动,仅仅是IDE在加载控件,IDE的启动路径就是VS2010的安装路径,和你的项目完全无关。而你就算DataBase.AppPath=“f:\\MJ\\”;,那个也是在public static……
果然sp1还是不行! “仅仅是IDE在加载控件”明白! 怪不得设置窗口出错,问我是否忽略。我忽略后生成调试运行就正常! 原来这样啊。那就是我可以忽略这个问题,反正到时编译了就正常了,是吧? 谢谢大家!!又学到了!
qldsrx 2013-02-17
  • 打赏
  • 举报
回复
这样写倒是可以,通过属性的get方法返回动态的字符串。
public string AppPath="";
public static string M_str_sqlcon 
{
    get
    { 
        return @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + AppPath + "\\data\\data.mdb;Persist Security Info=True;Jet OLEDB:Database Password=1234"; 
    }
}
 
AppPath=“f:\\MJ\\”;
goodsoft 2013-02-17
  • 打赏
  • 举报
回复
有时我也在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";
qldsrx 2013-02-17
  • 打赏
  • 举报
回复
引用 11 楼 romnyroy 的回复:
我想会不会是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赋值有用吗?
  • 打赏
  • 举报
回复
======================================================= .NET快速开发整合框架(RDIFramework.NET),基于.NET的快速开发、整合框架,给用户和开发者最佳的.Net框架部署方案。 平台博客:[CNBLOGS]http://www.cnblogs.com/huyong [CSDN]http://blog.csdn.net/chinahuyong 交流QQ:406590790 (请注明:CSDN) 平台微博:http://t.qq.com/yonghu86 邮件交流:406590790@qq.com
romnyroy 2013-02-17
  • 打赏
  • 举报
回复
我想会不会是VS2010的bug?打个VS2010sp1看看!!
qldsrx 2013-02-17
  • 打赏
  • 举报
回复
这个路径你只能用绝对路径了,谁让你一定要用文件数据库呢?
Kilin_Zhang 2013-02-17
  • 打赏
  • 举报
回复
data\\data.mdb 改成绝对路径吧
romnyroy 2013-02-17
  • 打赏
  • 举报
回复
引用 7 楼 goodsoft 的回复:
比如 C# code?123 public static string AppPath { set; get; } public static string M_str_sqlcon = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + AppPath + "\\data\\data.md……
第一个加在DataBase.cs的吧,第二个加在调用控件的form吧? 第二个是:DataBase.AppPath=Application.StartupPath;吧? 不行, 'C:\Windows\system32\data\data.mdb'不是一个有效的路径。 确定路径名称拼写是否正确,以及是否连接到文件存放的服务器。 我试过DataBase.AppPath=“f:\\MJ\\”; 还是出来'C:\Windows\system32\data\data.mdb'那个。好像没传过去哦
goodsoft 2013-02-17
  • 打赏
  • 举报
回复
比如
        public static string AppPath { set; get; }

        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"; 
        private void Form1_Load(object sender, EventArgs e)
        {
            控件ID.AppPath=Application.StartupPath;
        }
romnyroy 2013-02-17
  • 打赏
  • 举报
回复
引用 5 楼 goodsoft 的回复:
老大,你这个路径能做成自定义控件的一个属性,由程序传递进去的吗?
对不起,新手听不懂 能否详细点?
goodsoft 2013-02-17
  • 打赏
  • 举报
回复
老大,你这个路径能做成自定义控件的一个属性,由程序传递进去的吗?
romnyroy 2013-02-17
  • 打赏
  • 举报
回复
引用 3 楼 goodsoft 的回复:
把Application.StartupPath换成AppDomain.CurrentDomain.BaseDirectory,一般windows服务我才用这个,你试试
不行啊,这个跟Application.StartupPath一样: 'D:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE\data\data.mdb'不是一个有效的路径。 确定路径名称拼写是否正确,以及是否连接到文件存放的服务器。
goodsoft 2013-02-17
  • 打赏
  • 举报
回复
把Application.StartupPath换成AppDomain.CurrentDomain.BaseDirectory,一般windows服务我才用这个,你试试
romnyroy 2013-02-17
  • 打赏
  • 举报
回复
引用 1 楼 goodsoft 的回复:
有时我也在debug目录转到release目录也发生过这个问题,我都是增加Application.StartupPath来解决 类似 public static string M_str_sqlcon = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+Application.StartupPath+"\\data\\……
加上了Application.StartupPath还是不行。变成: 'D:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE\data\data.mdb'不是一个有效的路径。 确定路径名称拼写是否正确,以及是否连接到文件存放的服务器。 怎么搞的?

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧