1、附加数据库
下载的文件为sql2000的,sqlserver版本不能超过2008r2,不然不能完成附加
附加数据库sql语句如下:
EXEC sp_attach_db "QunInfo1", "H:\QunData\QunInfo1_Data.MDF" EXEC sp_attach_db "QunInfo2", "H:\QunData\QunInfo2_Data.MDF" EXEC sp_attach_db "QunInfo3", "H:\QunData\QunInfo3_Data.MDF" EXEC sp_attach_db "QunInfo4", "H:\QunData\QunInfo4_Data.MDF" EXEC sp_attach_db "QunInfo5", "H:\QunData\QunInfo5_Data.MDF" EXEC sp_attach_db "QunInfo6", "H:\QunData\QunInfo6_Data.MDF" EXEC sp_attach_db "QunInfo7", "H:\QunData\QunInfo7_Data.MDF" EXEC sp_attach_db "QunInfo8", "H:\QunData\QunInfo8_Data.MDF" EXEC sp_attach_db "QunInfo9", "H:\QunData\QunInfo9_Data.MDF" EXEC sp_attach_db "QunInfo10", "H:\QunData\QunInfo10_Data.MDF" EXEC sp_attach_db "QunInfo11", "H:\QunData\QunInfo11_Data.MDF" EXEC sp_attach_db "GroupData1", "H:\QunData\GroupData1_Data.MDF" EXEC sp_attach_db "GroupData2", "H:\QunData\GroupData2_Data.MDF" EXEC sp_attach_db "GroupData3", "H:\QunData\GroupData3_Data.MDF" EXEC sp_attach_db "GroupData4", "H:\QunData\GroupData4_Data.MDF" EXEC sp_attach_db "GroupData5", "H:\QunData\GroupData5_Data.MDF" EXEC sp_attach_db "GroupData6", "H:\QunData\GroupData6_Data.MDF" EXEC sp_attach_db "GroupData7", "H:\QunData\GroupData7_Data.MDF" EXEC sp_attach_db "GroupData8", "H:\QunData\GroupData8_Data.MDF" EXEC sp_attach_db "GroupData9", "H:\QunData\GroupData9_Data.MDF" EXEC sp_attach_db "GroupData10", "H:\QunData\GroupData10_Data.MDF" EXEC sp_attach_db "GroupData11", "H:\QunData\GroupData11_Data.MDF"
2、建立索引
IF not EXISTS (SELECT indid FROM GroupData9.dbo.sysindexes WHERE name = 'ix_QQNum_Group801') CREATE INDEX ix_QQNum_Group801 On GroupData9.dbo.Group801(QQNum); IF not EXISTS (SELECT indid FROM GroupData9.dbo.sysindexes WHERE name = 'ix_QQNum_Group802') CREATE INDEX ix_QQNum_Group802 On GroupData9.dbo.Group802(QQNum); IF not EXISTS (SELECT indid FROM GroupData9.dbo.sysindexes WHERE name = 'ix_QQNum_Group803') CREATE INDEX ix_QQNum_Group803 On GroupData9.dbo.Group803(QQNum);
因为需要建立索引的表太多了,复制的话要累死人的,so,程序生成之,C#代码如下:
private static StringBuilder GetSqlIndexStr() { StringBuilder sb = new StringBuilder(); for (int j = 1; j <= 11; j++) { for (int i = 1; i <= 100; i++) { int temp = 100 * j + i - 100; sb.Append(string.Format("IF not EXISTS (SELECT indid FROM GroupData{1}.dbo.sysindexes WHERE name = 'ix_QQNum_Group{0}')", temp.ToString(), j.ToString())); sb.Append("\r\n"); sb.Append(string.Format("CREATE INDEX ix_QQNum_Group{0} On GroupData{1}.dbo.Group{0}(QQNum);", temp.ToString(), j.ToString())); sb.Append("\r\n"); } sb.Append("\r\n"); sb.Append("\r\n"); } return sb; }
注意:建立索引过程中,最好分批执行建索引的sql语句,不然可能会卡死。
3、查询(建立存储过程)
(1)查询QQ信息
CREATE PROCEDURE REN_CX @QQNum int=null AS BEGIN declare @sql varchar(8000) declare @dbIdx int = 1 ------------------------------------------------------------- if OBJECT_ID('tempdb.dbo.#QunList') is not null drop table #QunList --新建了一个临时表 create table #QunList ( QQNum int, Nick varchar(20), Age int, Gender int, Auth int, QunNum int ) -------------------------------------------------------------- -- Search QunList --一个嵌套循环查找 一个表一个表找,找到一个插入临时表一条 while @dbIdx <= 11 begin declare @tblIdx int = 1 declare @tblName varchar(50) while @tblIdx <= 100 begin set @tblName = 'GroupData' + CONVERT(varchar(2), @dbIdx) + '.dbo.Group' set @tblName += CONVERT(varchar(5), (@dbIdx - 1) * 100 + @tblIdx) set @sql = 'select QQNum, Nick, Age,Gender, Auth,QunNum from ' set @sql += @tblName + ' where QQNum=' + CONVERT(varchar(15), @QQNum) insert into #QunList(QQNum, Nick,Age,Gender,Auth,QunNum) exec(@sql) print @tblname + ' OK' set @tblIdx += 1 --循环递增 end set @dbIdx += 1 --外层递增 end ----------------------------------------------------------------------- --显示 select * from #QunList END GO
(2)查询群消息
--建立查询群信息的存储过程 CREATE PROCEDURE QUNXX_CX @QunNum int=null as BEGIN declare @sql varchar(8000) set @sql = 'select QunNum,Title,QunText from QunInfo' + CONVERT(varchar(5), @QunNum / 10000000 + 1) + '.dbo.' set @sql += 'QunList' + CONVERT(varchar(10), @QunNum / 1000000 + 1) + ' where QunNum=' + Convert(varchar(20),@QunNum) exec(@sql) print(@sql) END GO
(3)查询群成员
--建立群成员的存储过程 CREATE PROCEDURE QUNCY_CX @QunNum int=null as BEGIN declare @sql varchar(8000) --群成员 set @sql = 'select * from GroupData' + CONVERT(varchar(5), @QunNum / 10000000 + 1) + '.dbo.' set @sql += 'Group' + CONVERT(varchar(10), @QunNum / 100000 + 1) + ' where QunNum=' + Convert(varchar(20),@QunNum) exec(@sql) print(@sql) END GO
执行完上面的3个SQL,存储过程就那建好了。
下面为执行:
EXEC REN_CX QQ号 EXEC QUNXX_CX 群号 EXEC QUNCY_CX 群号
4、C#查询
关键代码如下:
//数据库连接 SqlConnection coon = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["connectionString"].ConnectionString); DataSet finaldata = new DataSet(); public DataSet QueryREN(string _QueryREN) { string sqlstr = " EXEC REN_CX "+ _QueryREN; //执行存储过程 SqlDataAdapter da = new SqlDataAdapter(sqlstr, coon); DataSet ds = new DataSet(); da.Fill(ds); return ds; }
//单击事件 protected void Button1_Click(object sender, EventArgs e) { string ren = TextBox1.Text; try { if (ren != null || Convert.ToInt32(ren) > 10000) { if (QueryREN(ren) == null || QueryREN(ren).Tables[0].Rows.Count == 0) { Label1.Text = "查无此人"; } else { finaldata.Merge(QueryREN(ren)); GridView1.DataSource = finaldata; //绑定数据 GridView1.DataBind(); } } else { Label1.Text = "重新输入"; } } catch(Exception ex) {Label1.Text = "BUG:"+ex.ToString(); //BUG测试 } }