Discuz!NT 2.5 Sql数据库转换为Access数据库

Discuz!NT2.5本身带的access数据库有些小问题,分别是
  1. dnt_templates   自动增长
  2. dnt_topics  hide->poll(数字)
  3. dnt_usergroups  自动增长

要自己先把这些自动改一下。或者可以下载附件里面那个模板数据库。
代码见下:
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Data;
  6. using System.Data.SqlClient;
  7. using System.Data.OleDb;
  8. using System.IO;
  9. namespace DBcpy
  10. {
  11.     class Program
  12.     {
  13.         static void Main(string[] args)
  14.         {
  15.             SqlConnection SqlConn = new SqlConnection(@"Server=*;database=*;Trusted_Connection=SSPI");
  16.             OleDbConnection OleConn = new OleDbConnection(@"Provider=Microsoft.Jet.OleDb.4.0;Data Source=C:/*;Persist Security Info=True;");
  17.             SqlCommand SqlCmd = null;
  18.             OleDbCommand OleCmd = null;
  19.             SqlDataReader SqlDR = null;
  20.             OleDbDataReader OleDR = null;
  21.             SqlConn.Open();
  22.             OleConn.Open();
  23.             string sql = string.Empty;
  24.             sql = "select name from sysobjects where type='u'";
  25.             SqlCmd = new SqlCommand(sql, SqlConn);
  26.             SqlDR = SqlCmd.ExecuteReader();
  27.             List<String> TabList = new List<string>();
  28.             while(SqlDR.Read())
  29.                 TabList.Add(SqlDR[0].ToString());
  30.             SqlDR.Close();
  31.             TabList.Sort();
  32.             foreach(string TabName in TabList)
  33.             {
  34.                 List<string> ColList = new List<string>();
  35.                 string Identity = string.Empty;
  36.                 sql = string.Format("EXEC sp_help {0}", TabName);
  37.                 SqlDR = new SqlCommand(sql, SqlConn).ExecuteReader();
  38.                 SqlDR.NextResult();
  39.                 while(SqlDR.Read())
  40.                     ColList.Add(SqlDR[0].ToString());
  41.                 SqlDR.NextResult();
  42.                 while(SqlDR.Read())
  43.                 {
  44.                     Identity = SqlDR[0].ToString();
  45.                     if(Identity == "No identity column defined.")
  46.                         Identity = string.Empty;
  47.                     else
  48.                         ColList.Remove(Identity);
  49.                 }
  50.                 SqlDR.Close();
  51.                 sql = string.Format("select * from {0}", TabName);
  52.                 if(!string.IsNullOrEmpty(Identity))
  53.                     sql += " order by " + Identity;
  54.                 SqlDR = new SqlCommand(sql, SqlConn).ExecuteReader();
  55.                 int ID = 0;
  56.                 while(SqlDR.Read())
  57.                 {
  58.                     string f1 = string.Empty, f2 = string.Empty;
  59.                     foreach(string field in ColList)
  60.                     {
  61.                         f1 += string.Format(",[{0}]", field);
  62.                         f2 += string.Format(",/'{0}/'", SqlDR[field].ToString().TrimEnd().Replace("'""''"));
  63.                     }
  64.                     if(!string.IsNullOrEmpty(Identity))
  65.                     {
  66.                         int tID = int.Parse(SqlDR[Identity].ToString());
  67.                         for(int i = ID + 1;i < tID;i++)
  68.                         {
  69.                             sql = string.Format("insert into {0}({1}) values({2})", TabName, f1.Remove(0, 1), f2.Remove(0, 1));
  70.                             OleCmd = new OleDbCommand(sql, OleConn);
  71.                             OleCmd.ExecuteNonQuery();
  72.                             sql = string.Format("delete from {0} where {1}={2}", TabName, Identity, i);
  73.                             OleCmd = new OleDbCommand(sql, OleConn);
  74.                             OleCmd.ExecuteNonQuery();
  75.                         }
  76.                         ID = int.Parse(SqlDR[Identity].ToString());
  77.                     }
  78.                     sql = string.Format("insert into {0}({1}) values({2})", TabName, f1.Remove(0, 1), f2.Remove(0, 1));
  79.                     OleCmd = new OleDbCommand(sql, OleConn);
  80.                     OleCmd.ExecuteNonQuery();
  81.                 }
  82.                 SqlDR.Close();
  83.             }
  84.             OleConn.Close();
  85.             SqlConn.Close();
  86.         }
  87.     }
  88. }

代码和模板数据库下载地址: http://download.csdn.net/source/939867
本人水平有限,不保证此代码没有Bug。但是经过多次测试,目前还没有发现Bug。如果发现了Bug,欢迎指出。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值