Ejemplo n.º 1
0
        // 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);
        }
Ejemplo n.º 2
0
        // 创建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);
        }
Ejemplo n.º 3
0
        // 创建 dp2 系统的简单库(除种次号库外)
        int CreateDp2SimpleDatabases(out string strError)
        {
            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);
            }

            if (created_dbnames.Count > 0)  // 2017/8/11
            {
                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);
        }