我打开一个文件进行读操作,用的是FILESTREAM,存数据库的时候,连接字符串就变成了打开文件的路径了,怎么解决?

解决方案 »

  1.   

    我是连接ACCESS数据库,连接字符是这样声明的:
                            public static string ConnDB = "Provider=Microsoft.Jet.OLEDB.4.0; Data source=..\\..\\data\\hfhw.mdb";
    打开文件读的代码是这样的:
                             FileStream aFile = new FileStream(strFileName, FileMode.Open);
    我打开文件后,读取文件中的数据,分析后,存入数据库的时候提示:"c:\xx\xx\data\hfhw.mdb"不是有效的路径,确定路径名称拼写是否正确,以及确定是否连接到文件存放的服务器。”
    我发现,"c:\xx\xx\data\hfhw.mdb"是随着我要打开文件的路径的变化而变化,如果,我要读写的文件放在D盘,就变成“c:\xx\xx\data\hfhw.mdb”。我想不通,打开文件的路径和连接字符串有什么关系,请各位同仁,不吝赐教,谢谢。
      

  2.   

    不要用相对路径。根据应用程序启动路径,Application.StartupPath,转换成为绝对路径应该就可以了。
      

  3.   

    你贴出这么点代码有个毛用。看不出问题来!!!!!!!!!!最好debug调试。单步跟踪!!!
    !1
      

  4.   


                string strFileName = "";            byte[] byData = new byte[2000];
                byte[] byParseData;            GlobalVariant.arrKeyValue pp;            clsPeiBianGeGong objPeiBianGeGong = new clsPeiBianGeGong();            OpenFileDialog dlg = new OpenFileDialog();            dlg.Title = "导入手抄器数据";            dlg.Filter = "文本文件(*.txt)|*.txt";            dlg.ShowDialog();            //判断文件名是否为空,即是否按了“取消”按钮
                if (dlg.FileName != "")
                {
                    strFileName = dlg.FileName;
                }
                else
                {
                    return;
                }            FileStream aFile = new FileStream(strFileName, FileMode.Open);
                           //读取文件数据中控制字符,表示数据类型
                while (aFile.Read(byData, 0, 5) > 0)
                {
                  
                    switch (byData[4])
                    {
                        //实时数据
                        case 0x05:
                            aFile.Read(byData, 5, 174 - 5);
                            byParseData = new byte[174];                        Array.Copy(byData, 0, byParseData, 0, 174);                        if (!objPeiBianGeGong.ParseRealTime(byParseData, out pp))
                            {
                                //MessageBox.Show("解析实时数据失败!", GlobalVariant.ProjectName, MessageBoxButtons.OK, MessageBoxIcon.Information);                        }
                            break;                    //整点数据
                        case 0x01:
                            aFile.Read(byData, 5, 997 - 5);                        byParseData = new byte[997];                        Array.Copy(byData, 0, byParseData, 0, 997);                        if (!objPeiBianGeGong.ParseHour(byData, out pp))
                            {
                                //MessageBox.Show("解析整点数据失败!", GlobalVariant.ProjectName, MessageBoxButtons.OK, MessageBoxIcon.Information);                        }
                            break;                }            }
                aFile.Close();            MessageBox.Show("数据分析完毕!", GlobalVariant.ProjectName, MessageBoxButtons.OK, MessageBoxIcon.Information);
      

  5.   

    objPeiBianGeGong.ParseRealTime(byParseData, out pp)
    是类中的一个方法,方法里有存入数据库的操作,要用到连接字符串。
      

  6.   

    把相对路径改为绝对路径就可以
    或者自己写连接字符串,然后System.Windows.Forms.Application.StartupPath.ToString()在加上你的数据库的相对位置,这样的话,数据库应该在执行程序的目录中
      

  7.   

    谢谢你的教导。问题解决了。打开文件前:
    //默认的directorypah
                string dp=Directory.GetCurrentDirectory();打开文件后:
      Directory.SetCurrentDirectory(dp);
      

  8.   

    onthebox回答的正确,我已经实验过了,正确,我也遇到这个问题了,谢谢各位。