最近在研究一个试用版软件,发现它的数据都存在一个后缀为rsd的文件中,用Access2000打开该文件,会提示该文件是由老版本的Access创建的,如果直接打开,则不能编辑,也可以选择转换成mdb文件,感觉很奇怪。我用Access97打开这个文件也是同样的结果,不知道是什么原因?请问大家这是为什么?谢谢!

解决方案 »

  1.   

    只能连续三个恢复,不能再UP了吧?呵呵。最近很少见楼主啊。这种文件我也是第一次听说,你看看这儿是否有用?http://www.soho-works.net/BLOG/135.asp继续UP。
      

  2.   

    我研究了一下,编了个小例子,结果如下:
    采用编程的方式,在程序中直接对rsd文件进行读写
       1。在代码中直接连接rsd文件成功,并可以进行读的操作(如SELECT语句)。
       2。代码中的写操作(如UPDATE语句)则失败,同样的SQL语句,对于转换过来的mdb文件则有效。
    感觉这个文件应该是该软件的专有文件,其中做了一些“手脚”,^_^
    另注:
      这个软件是一个安全分析软件,全名Risk Spectrum Professional,核电站一般都用它,奇贵,听说一个拷贝要九万美元,哪位兄弟研究过它?有点内幕消息最好,^_^,谢了!
      

  3.   


    http://www.soho-works.net/BLOG/135.asp只可惜不是VC的
    ObjectSpaces - 自动生成 RSD 文件
    手动创建rsd 文件是个痛苦的过程,我们可以使用smo来自动生成这个过程。
    smo 全称是SQL Server Management Objects (SMO),基于.net环境,而早先的 (sql-dmo,SQL Distributed Management Objects )则是基于com环境。我写了一个简单过程BuildRSD,该过程需要提供sql server实例名和数据库名,返回包含rsd内容的字符串调用非常简单
     textBox1.Text=BuildRSD(txtServerInstance.Text,txtDatabase.Text);图
    感觉:慢
    smo 太慢,以致没有测试的必要,像这个一个小的数据库的遍历,竟然用了近10分钟。我的机器是赛杨433的,这也使我下了决心,订购了一个赛杨p4 1.7G的准系统(可能需要一个星期后才能到货)。整个运行过程中,sqlservr.exe 进程始终占用100%  cpu 。占用内存
    整个过程运行结束后,sqlservr.exe 用去几十Mb内存。整个过程非常不解,为何这样的操作会占用这样长的cpu时间和内存。另外 Table,Column,Database等对象均未实现IDisposable 接口,资源如何释放(=null?)附:过程全部 /// <summary>
    /// 生成指定数据库的rds 文件内容
    /// </summary>
    /// <param name="serverInstance">sql server实例名</param>
    /// <param name="dataBase">数据库名</param>
    /// <returns>string, rds 文件内容</returns>
      private string BuildRSD(string serverInstance,string dataBase)
      {   StringBuilder sb=new StringBuilder();
       Server oServer=new Server();
       ServerConnection oServerConnection=oServer.ConnectionContext;
       oServerConnection.ServerInstance=serverInstance;
       oServerConnection.Connect();
       
       Database db=oServer.Databases[dataBase];
     sb.Append("<rsd:Database Name=\""+db.Name+"\" Owner=\"" + db.Owner+"\" xmlns:rsd=\"http://schemas.microsoft.com/data/2002/09/28/rsd\">\r\n");   sb.Append("\t<r:Schema Name=\""+db.UserName+"\" xmlns:r=\"http://schemas.microsoft.com/data/2002/09/28/rsd\">\r\n");
       sb.Append("\t\t<rsd:Tables>\r\n");
     
        foreach(Table t in db.Tables)
        {
         if (! t.IsSystemObject)
         {
          sb.Append("\t\t\t<rsd:Table Name=\""+t.Name+"\">\r\n");
          sb.Append("\t\t\t\t<rsd:Columns>\r\n");
         
          foreach(Column c in t.Columns)
          {
           sb.Append("\t\t\t\t\t<rsd:Column Name='"+c.Name+"' DataType='"+c.DataType+"' Precision='"+c.Length+"'");
           if (c.Nullable)
           {
            sb.Append(" AllowDBNull='true'");
           }
           sb.Append("/>\r\n");
          
          }
          sb.Append("\t\t\t\t</rsd:Columns>\r\n");
          sb.Append ("\t\t\t\t<rsd:Constraints>\r\n");
         
          foreach(Index i in t.Indexes)
          {
           if (i.IndexKeyType==IndexKeyType.DriPrimaryKey)
           {
            sb.Append ("\t\t\t\t\t<rsd:PrimaryKey Name=\""+i.Name+"\">\r\n");
            foreach(IndexedColumn ic in i.IndexedColumns)
            {
             sb.Append("\t\t\t\t\t\t<rsd:ColumnRef Name=\""+ic.Name+"\"/>\r\n");        }
            sb.Append("\t\t\t\t\t</rsd:PrimaryKey>\r\n");
                  }
          }
          sb.Append("\t\t\t\t</rsd:Constraints>\r\n");
          sb.Append("\t\t\t</rsd:Table>\r\n");
         }
        }
       sb.Append("\t\t</rsd:Tables>");
       sb.Append("\t</r:Schema>");
       sb.Append("</rsd:Database>");
       oServerConnection.Disconnect();
       oServerConnection=null;
       oServer=null;
       return sb.ToString();
     
      }
     posted on 2003-8-29 19:09:07 
    Comments 
    Reader Comments标题: re: ObjectSpaces - 自动生成 RSD 文件
    名字: jjx
    发表时间: 2003-9-1 2:36:57
    这个,你有空可以试试。看看是否是我机器配置上的原因
    跟踪一下代码,可以预见到的是第一次获取(Tables,Columns,Indexes等)集合时会慢些(Delayed Loading模式),需要好几秒(可能同机器配置有关)
    但真正致命的造成的是
    sb.Append("\t\t\t\t\t<rsd:Column Name='"+c.Name+"' DataType='"+c.DataType+"' Precision='"+c.Length+"'");
    这句,每次执行都花去好几秒,几百个字段,结果可想而知跟踪一下一个属性 如DataType 
    Column 对象DataType 属性
    public string DataType
    {
    get
    {
    return base.Properties["DataType"].Value is String;
    }set
    {
    base.Properties.Get("DataType").Value = value;
    }
    }所有的smo对象都继承自SqlSmoObject对象
    internal PropertyCollection properties;public PropertyCollection Properties
    {
    get
    {
    CheckObjectState(false);
    if (properties == null)
    {
    GetServerObject().InitializeMetadata(this);
    }
    return properties;
    }
    }问题很显然,properties变量也是Delayed Loading模式,每次都要好几秒根本的,需要提高集合装载的速度,到毫秒级才行
      

  4.   

    谢谢楼上,这个我也在google中搜到了,好像讲的不是同一个东西吧?^_^
    该软件不用Sql server也可以运行,而且新建一个工程就会新建一个rsd文件,速度很快,我想没这么麻烦吧,^_^,期待救世主的出现吧555555555