黑马程序员技术交流社区

标题: 【已解决】ado.net视频中的获取数据库文件地址那段代码位置 [打印本页]

作者: 戴伟    时间: 2012-6-9 13:00
标题: 【已解决】ado.net视频中的获取数据库文件地址那段代码位置
本帖最后由 戴伟 于 2012-6-10 12:55 编辑

在练习省份城市combox那段时发现一个问题,在内嵌数据库文件方式访问数据库时,获取数据库文件地址那段代码加入program.cs文件的时候,起先我是这么加的(#region那段):
static class Program
    {
        /// <summary>
        /// 应用程序的主入口点。
        /// </summary>
        [STAThread]
        static void Main()
        {
            
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());

            #region 获取数据库文件地址
            string dataDir = AppDomain.CurrentDomain.BaseDirectory;
            if (dataDir.EndsWith(@"\bin\Debug\") || dataDir.EndsWith(@"\bin\Release\"))
            {
                dataDir = System.IO.Directory.GetParent(dataDir).Parent.Parent.FullName;
                AppDomain.CurrentDomain.SetData("DataDirectory", dataDir);
            }
            #endregion
        }
    }

发现无法进行insert操作,下断点,又发现已插入一条记录,但是数据库里面又没有
后来把这段加到最前面就可以正常进行insert操作了:
static class Program
    {
        /// <summary>
        /// 应用程序的主入口点。
        /// </summary>
        [STAThread]
        static void Main()
        {
            #region 获取数据库文件地址
            string dataDir = AppDomain.CurrentDomain.BaseDirectory;
            if (dataDir.EndsWith(@"\bin\Debug\") || dataDir.EndsWith(@"\bin\Release\"))
            {
                dataDir = System.IO.Directory.GetParent(dataDir).Parent.Parent.FullName;
                AppDomain.CurrentDomain.SetData("DataDirectory", dataDir);
            }
            #endregion
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
            
        }
    }
请问这个是什么问题,为什么一定要加在main函数的最前面

作者: 李玮    时间: 2012-6-9 17:50
后面的视频有讲,就是这阶段最后的那个视频  

这段代码如果不加 会默认操作 “\bin\Debug\”下的那个文件,你加上这段代码,就操作你用的那个数据库文件了

还有你放在最后,  是关闭窗口再执行,那就没用了。
#region 获取数据库文件地址
            string dataDir = AppDomain.CurrentDomain.BaseDirectory;
            if (dataDir.EndsWith(@"\bin\Debug\") || dataDir.EndsWith(@"\bin\Release\"))
            {
                dataDir = System.IO.Directory.GetParent(dataDir).Parent.Parent.FullName;
                AppDomain.CurrentDomain.SetData("DataDirectory", dataDir);
            }
            #endregion
作者: 戴伟    时间: 2012-6-10 12:45
谢谢解惑,我验证了一下你的说话,这段代码必须放在调用sql数据库之前
我把它放在Application.Run(new Form1())之前,和放在窗体的构造函数、Form1_Load里面,都是有效的。
只要是调用数据库之前就可以了,非常感谢!
作者: 黑马-许泽宇    时间: 2012-6-11 10:01
这里主要是连接字符串采用的相对路径的方法AttachDbFilename=|DataDirectory|\\data.mdf
所以默认操作数据库会为\bin\Debug\下的那个文件
而把连接字符串采用绝对路径的话AttachDbFilename=E:\练习\ConsoleApplication1\ConsoleApplication1\Database1.mdf
既可以不需要用到开头那段代码了,不过这样转移数据库的话,就需要修改连接字符串会造成操作上的不便。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2