zoukankan      html  css  js  c++  java
  • C#批量附加指定目录下的所有数据库文件到数据库中

    应用场合:因为经常更换操作系统,所以D盘存放数据库文件目录的数据库每次都要一个一个的附加到MSSQL中,因此设计程序批量附加省时间也方便自己和大家。

    程序不足:没有去研究跟实现NDF日志文件附加和多个日志文件的数据库附加。

    程序源码:


            /// <summary>
            /// 循环查找指定目录下要附加的数据库文件和对应的日志文件,连接本地数据库并执行数据库附加命令
            /// </summary>
            private void AttachFolderDB()
            {
                string strFileFolder = "";
                FolderBrowserDialog myFolderBrowserDialog = new FolderBrowserDialog();
                myFolderBrowserDialog.ShowDialog();
                if (myFolderBrowserDialog.SelectedPath != "")
                {
                    strFileFolder = myFolderBrowserDialog.SelectedPath;
                }
                //查找所有的MDF文件列表
                string[] arrAttachFilePath = null;
                if (strFileFolder != "")
                {
                    DirectoryInfo dir = new DirectoryInfo(strFileFolder);
                    //判断目录下是否存在主数据库文件
                    FileInfo[] finfo = dir.GetFiles("*.mdf");
                    if (finfo.Length > 0)
                    {
                        arrAttachFilePath = new string[finfo.Length];
                        if (finfo.Length > 0)
                        {
                            int i = 0;
                            foreach (FileInfo f in finfo)
                            {
                                arrAttachFilePath[i] = f.FullName;
                                i = i + 1;
                            }
                        }
                    }

                }
                //循环附加数据库
                if (arrAttachFilePath != null)
                {
                    for (int i = 0; i < arrAttachFilePath.Length; i++)
                    {
                        string strFile = arrAttachFilePath[i].ToString();
                        string strMdfFilePath = arrAttachFilePath[i].ToString();//mdf路径
                        string strLogFilePath = "";//日志文件路径
                        string strLdfFilePath = "";//日志文件路径
                        string strDataFileName = strMdfFilePath.Substring(strMdfFilePath.LastIndexOf("\\") + 1, strMdfFilePath.Length - strMdfFilePath.LastIndexOf("\\") - 1);
                        strDataFileName = strDataFileName.Remove(strDataFileName.LastIndexOf("."));

                        string logIndex = "_Data";
                        int n = strDataFileName.IndexOf(logIndex);

                        if (n == -1)
                        {
                            strLogFilePath = strMdfFilePath.Remove(strMdfFilePath.LastIndexOf("\\")) + "\\" + strDataFileName + "_log.ldf";
                            strLdfFilePath = strMdfFilePath.Remove(strMdfFilePath.LastIndexOf("\\")) + "\\" + strDataFileName + ".ldf";
                        }
                        else
                        {
                            strDataFileName = strDataFileName.Remove(strDataFileName.LastIndexOf("_"));
                            strLogFilePath = strMdfFilePath.Remove(strMdfFilePath.LastIndexOf("\\")) + "\\" + strDataFileName + "_log.ldf";
                            strLdfFilePath = strMdfFilePath.Remove(strMdfFilePath.LastIndexOf("\\")) + "\\" + strDataFileName + ".ldf";
                        }

                        StringBuilder sb = new StringBuilder();
                        sb.Append("sp_attach_db @dbname='" + strDataFileName + "',@filename1='" + strMdfFilePath + "'");
                        if (System.IO.File.Exists(strLogFilePath))
                        {
                            sb.Append(",@filename2='" + strLogFilePath + "'");
                            AttachDataBase(sb.ToString());
                        }
                        else if (System.IO.File.Exists(strLdfFilePath))
                        {
                            sb.Append(",@filename2='" + strLdfFilePath + "'");
                            AttachDataBase(sb.ToString());
                        }
                        else
                        {
                            Console.WriteLine("数据库文件" + strMdfFilePath + "缺少必备的日志文件!");
                        }
                    }
                }
            }
            /// <summary>
            /// 连接数据库并执行附加对应的数据库文件命令
            /// </summary>
            /// <param name="strSql">附加数据库命令字符串</param>
            /// <returns></returns>
            private bool AttachDataBase(string strSql)
            {
                SqlConnection con = new SqlConnection(@"Data Source=(local);Initial Catalog=master;Integrated Security=True");
                try
                {
                    con.Open();
                    SqlCommand cmd = new SqlCommand();
                    cmd.Connection = con;
                    cmd.CommandText = strSql;
                    cmd.ExecuteNonQuery();
                    return true;
                }
                catch (Exception ex)
                {
                    //如果数据库中存在名为要添加的数据库时则抛出异常
                    Console.WriteLine("附加数据库时异常:" + ex.Message);
                    return false;
                }
                finally
                {
                    con.Close();
                }
            }

  • 相关阅读:
    步步为营 .NET三层架构解析 六、BLL的设计
    js/jquery 获取url参数
    C# 生成XML
    Microsoft Ajax Minifier 使用综合
    公司面试题目之取出数据库中重复的记录
    关于下拉菜单(dropdownlist)一些用法心得
    数据库事务日志已满的解决办法
    Asp.Net[C#] 使用GridView 分页,编辑,删除,导出XML完整页面
    SQL Update
    如何安装ASPAJAXExtSetup.msi
  • 原文地址:https://www.cnblogs.com/xqf222/p/3306763.html
Copyright © 2011-2022 走看看