// List<XmlDocument> existing_database_doms = new List<XmlDocument>(); // 创建新的数据库。创建之前,还要删除已经存在的同名数据库 // return: // -1 出错 // 0 放弃删除和创建 // 1 成功 int CreateNewDp2Databases(out string strError) { int nRet = 0; strError = ""; string strDatabaseInfo = ""; string strOutputInfo = ""; // 删除的数据库名 List <string> delete_dbnames = new List <string>(); // 创建的数据库名 List <string> create_dbnames = new List <string>(); /* * // 用于删除命令的DOM * XmlDocument delete_dom = new XmlDocument(); * delete_dom.LoadXml("<root />"); * */ // 用于创建命令的DOM XmlDocument create_dom = new XmlDocument(); create_dom.LoadXml("<root />"); for (int i = 0; i < this.listView_creatingDp2DatabaseList.Items.Count; i++) { ListViewItem item = this.listView_creatingDp2DatabaseList.Items[i]; if (item.ImageIndex == 1) { continue; } string strType = ListViewUtil.GetItemText(item, 1); create_dbnames.Add(item.Text); // 需要新创建的 if (item.ImageIndex == 2 || item.ImageIndex == 0) { XmlNode nodeCreateDatabase = create_dom.CreateElement("database"); create_dom.DocumentElement.AppendChild(nodeCreateDatabase); // name DomUtil.SetAttr(nodeCreateDatabase, "name", item.Text); if (StringUtil.IsInList("书目库", strType) == true) { // 需要创建书目库 // type DomUtil.SetAttr(nodeCreateDatabase, "type", "biblio"); // syntax string strSyntax = "unimarc"; if (StringUtil.IsInList("unimarc", strType, true) == true) { strSyntax = "unimarc"; } else if (StringUtil.IsInList("usmarc", strType, true) == true) { strSyntax = "usmarc"; } DomUtil.SetAttr(nodeCreateDatabase, "syntax", strSyntax); // usage string strUsage = "book"; if (StringUtil.IsInList("图书", strType, true) == true) { strUsage = "book"; } else if (StringUtil.IsInList("期刊", strType, true) == true) // BUG !!! 2009/1/1 changed { strUsage = "series"; } DomUtil.SetAttr(nodeCreateDatabase, "usage", strUsage); // 实体库名 if (StringUtil.IsInList("实体", strType, true) == true) // 2008/10/15 new add { DomUtil.SetAttr(nodeCreateDatabase, "entityDbName", item.Text + "实体"); } // 订购库名 if (StringUtil.IsInList("采购", strType, true) == true) { DomUtil.SetAttr(nodeCreateDatabase, "orderDbName", item.Text + "订购"); } // 检查期库名的具备和usage是否矛盾 if (strUsage == "series") { DomUtil.SetAttr(nodeCreateDatabase, "issueDbName", item.Text + "期"); } } // end of if 书目库 else if (StringUtil.IsInList("读者库", strType) == true) { // type DomUtil.SetAttr(nodeCreateDatabase, "type", "reader"); } if (StringUtil.IsInList("参与流通", strType) == true) { DomUtil.SetAttr(nodeCreateDatabase, "inCirculation", "true"); } else { DomUtil.SetAttr(nodeCreateDatabase, "inCirculation", "false"); } } // 需要先加以删除的 if (item.ImageIndex == 2) { /* * XmlNode nodeDeleteDatabase = delete_dom.CreateElement("database"); * delete_dom.DocumentElement.AppendChild(nodeDeleteDatabase); * * // name * DomUtil.SetAttr(nodeDeleteDatabase, * "name", * item.Text); * */ delete_dbnames.Add(item.Text); } } // 提示修改的数据库名,要删除的数据库,要创建的数据库 string strText = ""; if (delete_dbnames.Count > 0) { strText += "要删除下列数据库:\r\n---\r\n"; strText += Global.MakeListString(delete_dbnames, "\r\n"); strText += "\r\n\r\n***警告: 数据库被删除后,其中的数据再也无法复原!\r\n"; strText += "\r\n"; } if (create_dbnames.Count > 0) { strText += "要创建下列数据库:\r\n---\r\n"; strText += Global.MakeListString(create_dbnames, "\r\n"); strText += "\r\n"; } // 对话框警告 DialogResult result = MessageBox.Show(this, strText + "\r\n确实要继续?", "UpgradeDt1000ToDp2", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2); if (result != DialogResult.Yes) { return(0); } AppendHtml( "====================<br/>" + "创建数据库<br/>" + "====================<br/><br/>"); string strInfo = ""; if (delete_dbnames.Count > 0) { strInfo += "在创建前,删除了下列和即将创建数据库重名的数据库:\r\n---\r\n"; strInfo += Global.MakeListString(delete_dbnames, ","); strInfo += "\r\n\r\n"; } if (create_dbnames.Count > 0) { strInfo += "创建了下列数据库:\r\n---\r\n"; strInfo += Global.MakeListString(create_dbnames, ","); strInfo += "\r\n(注:大书目库可能包含下属的实体库、采购库、期库,在这里仅列出了书目库名)\r\n"; strInfo += "\r\n\r\n"; } // 删除数据库 if (delete_dbnames.Count > 0) { // 删除数据库 nRet = this.DeleteDatabase( Global.MakeListString(delete_dbnames, ","), out strOutputInfo, out strError); if (nRet == -1) { goto ERROR1; } } // 创建数据库 XmlNodeList nodes = create_dom.DocumentElement.SelectNodes("database"); if (nodes.Count > 0) { strDatabaseInfo = create_dom.OuterXml; // 创建数据库 nRet = this.CreateDatabase( strDatabaseInfo, out strOutputInfo, out strError); if (nRet == -1) { goto ERROR1; } } this.textBox_createDp2DatabaseSummary.Text = strInfo; AppendHtml(strInfo.Replace("\r\n", "<br/>")); return(1); ERROR1: return(-1); }
// 创建dp2系统的种次号库 // parameters: // error_databasename 类型不符合的、已经存在重名的数据库 // return: // -1 error // 0 suceed。不过error_databasename中可能返回因重名(并且类型不同)而未能创建的数据库名 int CreateDp2ZhongcihaoDatabases(List <string> create_dbnames, out List <string> error_databasename, out string strError) { int nRet = 0; error_databasename = new List <string>(); AppendHtml( "====================<br/>" + "创建种次号库<br/>" + "====================<br/><br/>"); string strDatabaseInfo = ""; string strOutputInfo = ""; XmlDocument dom = new XmlDocument(); dom.LoadXml("<root />"); for (int i = 0; i < create_dbnames.Count; i++) { string strDatabaseName = create_dbnames[i]; string strDatabaseType = "zhongcihao"; // 是否已经存在特定类型、特定名字的dp2数据库? // return: // -1 数据库存在,但是类型不符合预期 // 0 不存在 // 1 存在 nRet = ExistingDp2Database(strDatabaseName, "zhongcihao", out strError); if (nRet == -1) { error_databasename.Add(strDatabaseName); continue; } if (nRet == 1) { continue; } XmlNode nodeDatabase = dom.CreateElement("database"); dom.DocumentElement.AppendChild(nodeDatabase); // type DomUtil.SetAttr(nodeDatabase, "type", strDatabaseType); nRet = Global.CheckDbName(strDatabaseName, out strError); if (nRet == -1) { return(-1); } DomUtil.SetAttr(nodeDatabase, "name", strDatabaseName); } strDatabaseInfo = dom.OuterXml; // 创建数据库 nRet = this.CreateDatabase( strDatabaseInfo, out strOutputInfo, out strError); if (nRet == -1) { return(-1); } string strInfo = ""; if (create_dbnames.Count > 0) { strInfo += "新创建了下列种次号库:\r\n---\r\n"; strInfo += Global.MakeListString(create_dbnames, ","); strInfo += "\r\n\r\n"; } AppendHtml(strInfo.Replace("\r\n", "<br/>")); return(0); }
// 创建dp2系统的简单库(除种次号库外) int CreateDp2SimpleDatabases(out string strError) { int nRet = 0; AppendHtml( "====================<br/>" + "创建辅助数据库<br/>" + "====================<br/><br/>"); // 创建的数据库名 List <string> creating_dbnames = new List <string>(); List <string> dbtypes = new List <string>(); creating_dbnames.Add("违约金"); dbtypes.Add("amerce"); creating_dbnames.Add("预约到书"); dbtypes.Add("arrived"); creating_dbnames.Add("出版者"); dbtypes.Add("publisher"); creating_dbnames.Add("消息"); dbtypes.Add("message"); /* * 种次号库则要根据需要创建。还需要创建<zhongcihao>配置小节 * creating_dbnames.Add("种次号库"); * dbtypes.Add("zhongcihao"); * */ string strDatabaseInfo = ""; string strOutputInfo = ""; XmlDocument dom = new XmlDocument(); dom.LoadXml("<root />"); List <string> created_dbnames = new List <string>(); for (int i = 0; i < creating_dbnames.Count; i++) { string strDatabaseName = creating_dbnames[i]; string strDatabaseType = dbtypes[i]; // 如果已经存在那个类型的辅助库 if (ExistingDp2DatabaseType(strDatabaseType) == true) { continue; } XmlNode nodeDatabase = dom.CreateElement("database"); dom.DocumentElement.AppendChild(nodeDatabase); // type DomUtil.SetAttr(nodeDatabase, "type", strDatabaseType); nRet = Global.CheckDbName(strDatabaseName, out strError); if (nRet == -1) { return(-1); } DomUtil.SetAttr(nodeDatabase, "name", strDatabaseName); created_dbnames.Add(strDatabaseName); } strDatabaseInfo = dom.OuterXml; // 创建数据库 nRet = this.CreateDatabase( strDatabaseInfo, out strOutputInfo, out strError); if (nRet == -1) { return(-1); } string strInfo = ""; if (created_dbnames.Count > 0) { strInfo += "新创建了下列辅助数据库:\r\n---\r\n"; strInfo += Global.MakeListString(created_dbnames, ","); strInfo += "\r\n\r\n"; } else { strInfo += "拟创建的辅助数据库都已经存在了\r\n"; strInfo += "\r\n\r\n"; } AppendHtml(strInfo.Replace("\r\n", "<br/>")); return(0); }