A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 戴伟 于 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函数的最前面

评分

参与人数 1技术分 +2 收起 理由
宋天琪 + 2

查看全部评分

3 个回复

正序浏览
这里主要是连接字符串采用的相对路径的方法AttachDbFilename=|DataDirectory|\\data.mdf
所以默认操作数据库会为\bin\Debug\下的那个文件
而把连接字符串采用绝对路径的话AttachDbFilename=E:\练习\ConsoleApplication1\ConsoleApplication1\Database1.mdf
既可以不需要用到开头那段代码了,不过这样转移数据库的话,就需要修改连接字符串会造成操作上的不便。

评分

参与人数 1技术分 +2 收起 理由
宋天琪 + 2

查看全部评分

回复 使用道具 举报
谢谢解惑,我验证了一下你的说话,这段代码必须放在调用sql数据库之前
我把它放在Application.Run(new Form1())之前,和放在窗体的构造函数、Form1_Load里面,都是有效的。
只要是调用数据库之前就可以了,非常感谢!
回复 使用道具 举报
后面的视频有讲,就是这阶段最后的那个视频  

这段代码如果不加 会默认操作 “\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

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马