Discuz!NT2.5本身带的access数据库有些小问题,分别是
要自己先把这些自动改一下。或者可以下载附件里面那个模板数据库。
代码见下:
代码和模板数据库下载地址: http://download.csdn.net/source/939867
本人水平有限,不保证此代码没有Bug。但是经过多次测试,目前还没有发现Bug。如果发现了Bug,欢迎指出。
- dnt_templates 自动增长
- dnt_topics hide->poll(数字)
- dnt_usergroups 自动增长
要自己先把这些自动改一下。或者可以下载附件里面那个模板数据库。
代码见下:
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Data;
- using System.Data.SqlClient;
- using System.Data.OleDb;
- using System.IO;
- namespace DBcpy
- {
- class Program
- {
- static void Main(string[] args)
- {
- SqlConnection SqlConn = new SqlConnection(@"Server=*;database=*;Trusted_Connection=SSPI");
- OleDbConnection OleConn = new OleDbConnection(@"Provider=Microsoft.Jet.OleDb.4.0;Data Source=C:/*;Persist Security Info=True;");
- SqlCommand SqlCmd = null;
- OleDbCommand OleCmd = null;
- SqlDataReader SqlDR = null;
- OleDbDataReader OleDR = null;
- SqlConn.Open();
- OleConn.Open();
- string sql = string.Empty;
- sql = "select name from sysobjects where type='u'";
- SqlCmd = new SqlCommand(sql, SqlConn);
- SqlDR = SqlCmd.ExecuteReader();
- List<String> TabList = new List<string>();
- while(SqlDR.Read())
- TabList.Add(SqlDR[0].ToString());
- SqlDR.Close();
- TabList.Sort();
- foreach(string TabName in TabList)
- {
- List<string> ColList = new List<string>();
- string Identity = string.Empty;
- sql = string.Format("EXEC sp_help {0}", TabName);
- SqlDR = new SqlCommand(sql, SqlConn).ExecuteReader();
- SqlDR.NextResult();
- while(SqlDR.Read())
- ColList.Add(SqlDR[0].ToString());
- SqlDR.NextResult();
- while(SqlDR.Read())
- {
- Identity = SqlDR[0].ToString();
- if(Identity == "No identity column defined.")
- Identity = string.Empty;
- else
- ColList.Remove(Identity);
- }
- SqlDR.Close();
- sql = string.Format("select * from {0}", TabName);
- if(!string.IsNullOrEmpty(Identity))
- sql += " order by " + Identity;
- SqlDR = new SqlCommand(sql, SqlConn).ExecuteReader();
- int ID = 0;
- while(SqlDR.Read())
- {
- string f1 = string.Empty, f2 = string.Empty;
- foreach(string field in ColList)
- {
- f1 += string.Format(",[{0}]", field);
- f2 += string.Format(",/'{0}/'", SqlDR[field].ToString().TrimEnd().Replace("'", "''"));
- }
- if(!string.IsNullOrEmpty(Identity))
- {
- int tID = int.Parse(SqlDR[Identity].ToString());
- for(int i = ID + 1;i < tID;i++)
- {
- sql = string.Format("insert into {0}({1}) values({2})", TabName, f1.Remove(0, 1), f2.Remove(0, 1));
- OleCmd = new OleDbCommand(sql, OleConn);
- OleCmd.ExecuteNonQuery();
- sql = string.Format("delete from {0} where {1}={2}", TabName, Identity, i);
- OleCmd = new OleDbCommand(sql, OleConn);
- OleCmd.ExecuteNonQuery();
- }
- ID = int.Parse(SqlDR[Identity].ToString());
- }
- sql = string.Format("insert into {0}({1}) values({2})", TabName, f1.Remove(0, 1), f2.Remove(0, 1));
- OleCmd = new OleDbCommand(sql, OleConn);
- OleCmd.ExecuteNonQuery();
- }
- SqlDR.Close();
- }
- OleConn.Close();
- SqlConn.Close();
- }
- }
- }
代码和模板数据库下载地址: http://download.csdn.net/source/939867
本人水平有限,不保证此代码没有Bug。但是经过多次测试,目前还没有发现Bug。如果发现了Bug,欢迎指出。