C#数据库操作之批量附加数据库

  如果要将某个数据库或多个数据库附加到当前的服务器中,那么必须使用附加数据库的功能。这里通过执行 master系统数据库的sp_attch_db 存储过程实现。这个存储过程的参数 dbname 是等待附加的数据库路径。

  点击“浏览" 打开 打开文件对话框,选择将要附加的数据库这里可以选择单个或多个。

C#数据库操作之批量附加数据库_第1张图片

  单击”附加“进行数据库的附加

C#数据库操作之批量附加数据库_第2张图片

附加按钮的 Click 事件如下:

View Code
   
   
1 private void button2_Click( object sender, EventArgs e)
2 {
3 if (lboxMenu.Items.Count > 0 )
4 {
5 Append(lboxMenu, progressBar); // 附加数据库操作
6   MessageBox.Show( " 提示:附加成功! " , " 提示 " , MessageBoxButtons.OK, MessageBoxIcon.Information);
7 }
8 else
9 MessageBox.Show( " 请选择要附加的数据库! " , " 提示 " , MessageBoxButtons.OK, MessageBoxIcon.Information);
10 }
11
12 /// <summary>
13 /// 附加数据库操作
14 /// </summary>
15 /// <param name="lbox"> 将要附加的数据库列表 </param>
16 /// <param name="PBar"> 进度条 </param>
17   public void Append(ListBox lbox, ProgressBar PBar)
18 {
19 using (SqlConnection con = new SqlConnection( " server=.;pwd= " + strpwd + " ;uid= " + struser + " ;database=master " ))
20 {
21 PBar.Maximum = lbox.Items.Count;
22 for ( int i = 0 ; i < lbox.Items.Count; i ++ )
23 {
24 string strFile = lbox.Items[i].ToString();
25 string [] getInfo = new string [ 2 ];
26 string mdfpath = lbox.Items[i].ToString(); // mdf路径
27   string DataName = mdfpath.Substring(mdfpath.LastIndexOf( " \\ " ) + 1 , mdfpath.Length - mdfpath.LastIndexOf( " \\ " ) - 1 );
28 DataName = DataName.Remove(DataName.LastIndexOf( " . " ));
29
30 string logIndex = " _Data " ;
31 int n = DataName.IndexOf(logIndex);
32
33 if (n == - 1 )
34 {
35 logName = mdfpath.Remove(mdfpath.LastIndexOf( " \\ " )) + " \\ " + DataName + " _log.ldf " ;
36 }
37 else
38 {
39 DataName = DataName.Remove(DataName.LastIndexOf( " _ " ));
40 logName = mdfpath.Remove(mdfpath.LastIndexOf( " \\ " )) + " \\ " + DataName + " _log.ldf " ;
41 }
42 SqlCommand cmd = new SqlCommand();
43 con.Open();
44 cmd.Connection = con;
45 StringBuilder sb = new StringBuilder();
46 // 将sp_attach_db追加到StringBuilder对象中
47   sb.Append( " sp_attach_db @dbname=' " + DataName + " ', " );
48 sb.Append( " @filename1=' " + mdfpath + " ' " );
49 if (System.IO.File.Exists(logName))
50 {
51 sb.Append( " ,@filename2=' " + logName + " ' " );
52 }
53 else
54 {
55 MessageBox.Show( " 注意:缺少必备的log文件! " , " 警告 " , MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
56 // 此处需要修改
57   }
58 try
59 {
60 cmd.CommandText = sb.ToString();
61 cmd.ExecuteNonQuery();
62 }
63 catch (Exception ety)
64 {
65 // 如果数据库中存在名为要添加的数据库则抛出异常
66   MessageBox.Show(ety.Message, " 提示信息 " , MessageBoxButtons.OK, MessageBoxIcon.Information);
67 }
68 con.Close();
69 // 获取附加数据库的名称
70   getInfo[ 0 ] = mdfpath.Substring(mdfpath.LastIndexOf( " \\ " ) + 1 , mdfpath.Length - mdfpath.LastIndexOf( " \\ " ) - 1 );
71 // 获取附加数据库路径
72   getInfo[ 1 ] = mdfpath;
73 ListViewItem lvi = new ListViewItem(getInfo, " info " );
74 // 将名称和路径添加到listView中
75 listView1.Items.Add(lvi);
76 PBar.Value = i + 1 ;
77 }
78 }
79 }

附:数据库附加操作代码部分有些繁琐,有时间优化一下。嘿嘿


你可能感兴趣的:(数据库)