真的没有人会么? 难道没有人来帮我?
目前进展情况:
在 sql 里建了三个表 并且标明了表之间的关系 即公司---部门---员工
也能够用 .net里的xml读出来 但是读出来的时候 老是出现datareader错误 (我是用datareader读出来的) 即datareader不能关 关掉了 用while又读不出来 望高手来看看 顺便接分
目前进展情况:
在 sql 里建了三个表 并且标明了表之间的关系 即公司---部门---员工
也能够用 .net里的xml读出来 但是读出来的时候 老是出现datareader错误 (我是用datareader读出来的) 即datareader不能关 关掉了 用while又读不出来 望高手来看看 顺便接分
sqldatareader如果在循环中实现,就一定要先关闭,在生成,建议用dataset实现
请看代码:
SqlConnection conn = new SqlConnection();
conn.ConnectionString = "Server=(local);database=department;Trusted_connection=yes;";
SqlCommand cmd1 = new SqlCommand("select * from company",conn);
conn.Open();
SqlDataReader reader = cmd1.ExecuteReader();
XmlDocument xDoc = new XmlDocument();
XmlElement rootelem = xDoc.CreateElement("Data");
xDoc.AppendChild(rootelem);
while(reader.Read())
{
XmlElement elem = xDoc.CreateElement(reader.GetString(1));
rootelem.AppendChild(elem); SqlCommand cmd2 = new SqlCommand("select * from depart where cid="+reader.GetInt32(0),conn);
reader.Close();
SqlDataReader r2 = cmd2.ExecuteReader();
while(r2.Read())
{
XmlElement e2 = xDoc.CreateElement(r2.GetString(1));
elem.AppendChild(e2);
}
r2.Close();
reader = cmd1.ExecuteReader();
reader.NextResult();
}
MessageBox.Show(xDoc.InnerXml);
有一点说明:sqldatareader是一个只读的,向前的,有状态的对象。
换句话说,如果一个sqldatareader实例被创建了,它所引用到的SqlConnection对象
就被它独占,其他的实例不能再引用这个SqlConnection对象。
所以,要解决你遇到的问题有2种方式
1,用无状态的dataset对象代替sqldatareader(dataset对象实例被创建,就和SqlConnection短开了连接)
2,每个sqldatareader实例引用不同SqlConnection对象,引用完后记住应释放资源。
如下简单的举个例子
SqlConnection conn2 = new SqlConnection();
SqlConnection conn3 = new SqlConnection();
conn1.ConnectionString = "Server=(local);database=department;Trusted_connection=yes;";
conn2.ConnectionString = "Server=(local);database=department;Trusted_connection=yes;";
conn3.ConnectionString = "Server=(local);database=department;Trusted_connection=yes;";
SqlCommand cmd1 = new SqlCommand("select * from company",conn1);
conn1.Open();
conn2.Open();
conn3.Open();
SqlDataReader reader = cmd1.ExecuteReader();
XmlDocument xDoc = new XmlDocument();
XmlElement rootelem = xDoc.CreateElement("Data");
xDoc.AppendChild(rootelem);
while(reader.Read())
{
XmlElement elem = xDoc.CreateElement(reader.GetString(1));
rootelem.AppendChild(elem); SqlCommand cmd2 = new SqlCommand("select * from depart where cid="+reader.GetInt32(0),conn2);
reader.Close();
SqlDataReader r2 = cmd2.ExecuteReader();
while(r2.Read())
{
XmlElement e2 = xDoc.CreateElement(r2.GetString(1));
elem.AppendChild(e2);
}
r2.Close();
}
有没有更好的办法? 或者用.net存成xml格式的文件? 又如何导入到visio中?
DataSet dsW=new DataSet();
dsW.Tables.Add(this.CollectionOprateQuest);
dsW.WriteXml(strXmlPath+"Library.xml",XmlWriteMode.IgnoreSchema);
dsW.Tables.Remove(this.CollectionOprateQuest);
dsW.Tables.Add(this.CollectionOprateGut.Copy());
dsW.WriteXml(strXmlPath+"OperationGut.xml",XmlWriteMode.IgnoreSchema); DataSet有 WriteXml的()和dsW.GetXml()方法
.建数据库模型图->反向工程->选择数据源(先建立ODBC数据源)
如果导入不成功看一下visio给你的提示,一般都能解决。
2.没有。
3.最好不要使用XML,反向工程形成的数据库模型图中有数据库关系、函数、存储过程等对象,还可以将visio中做的改变与数据库保持同步。
装完后打开vs.net在项目工具条下有一个visio uml,然后点反向工程即可。
这样生成uml类图并不能完全表现你的对象关系,还需要你自己去画出use case,class等框图。
对vision不懂可以看visio的帮助,也可以参考vision2003自带的例子。
打开visio2003,点文件--新建--浏览绘图示例,你可以看到很多简单visio绘图示例
里面自动可以连接
很方便
就想在一个平台上操作一样
文件--新建--数据库--ER Source Model
然后点数据库--点反向工程---即可以通过反向工程从现有数据库中提取数据库框架
哪位给个地址吧。