最近在研究一个试用版软件,发现它的数据都存在一个后缀为rsd的文件中,用Access2000打开该文件,会提示该文件是由老版本的Access创建的,如果直接打开,则不能编辑,也可以选择转换成mdb文件,感觉很奇怪。我用Access97打开这个文件也是同样的结果,不知道是什么原因?请问大家这是为什么?谢谢!
解决方案 »
- 收藏 不显示删除回复显示所有回复显示星级回复显示得分回复 求助:有WritePrivateProfileString 可以向 ini 写一个字符串,如果想写一个
- debug和release识别中文路径的问题
- 请教下CADODatabase的使用
- 传递字符串DLL调用导致主程序退出问题
- 网络应用程序中,并发体系分为"基于任务"和"基于消息",好抽象啊!请解释下,好么?
- 图像识别
- 我怎么检查比如一个按钮是否获得了焦点?
- 请问,如何将菜单和对话框联系起来
- 如何使窗口大小始终大于某一个值却不闪烁?
- 高分求取。。。工作需要,急需VC GIF控件源代码
- 关于DDB与DIB的问题???
- 关于ansi字符串转化成unicode双字节字符串的问题~
采用编程的方式,在程序中直接对rsd文件进行读写
1。在代码中直接连接rsd文件成功,并可以进行读的操作(如SELECT语句)。
2。代码中的写操作(如UPDATE语句)则失败,同样的SQL语句,对于转换过来的mdb文件则有效。
感觉这个文件应该是该软件的专有文件,其中做了一些“手脚”,^_^
另注:
这个软件是一个安全分析软件,全名Risk Spectrum Professional,核电站一般都用它,奇贵,听说一个拷贝要九万美元,哪位兄弟研究过它?有点内幕消息最好,^_^,谢了!
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模式,每次都要好几秒根本的,需要提高集合装载的速度,到毫秒级才行
该软件不用Sql server也可以运行,而且新建一个工程就会新建一个rsd文件,速度很快,我想没这么麻烦吧,^_^,期待救世主的出现吧555555555