使用程式匯出建表語句,及以Insert語句形式匯出資料
前一段時間在弄,有時要把一些資料(資料類不大)導到其它型別的資料庫裡,發現無論是SqlServer、、MySql,在從庫中匯出標準的建表和插入資料(即Insert語句)語句時,多少有些不如人意,於是結合自己的要求,自己動手寫一個匯出的程式。
程式在ListBox(lboxAll)中列出指定的資料庫中所有的使用者表名,選中要匯出的表名將會被新增到另一ListBox(lboxSelected)中,程式將匯出lboxSelected中所有表的建表語句以及以Insert語句形式匯出的資料:
1)SqlServer:
獲得使用者表資訊
selectnametnamefromsysobjectswherextype='U'
獲取表的欄位資訊
selectsysobjects.nametable_name,syscolumns.namecolumn_name,systypes.name
data_type,syscolumns.isnullable,syscolumns.length,syscolumns.prec,syscolumns.scale
fromsysobjects
joinsyscolumns
onsysobjects.id=syscolumns.id
joinsystypes
onsyscolumns.xtype=systypes.xtype
wheresysobjects.name='tablename'
相關程式(省略部分程式碼):
privatevoidShowAllTable()
{
……
this.cmd.CommandText="selectnametnamefromsysobjectswherextype='U'";
try
{
this.conn.Open();
SqlDataAdapterda=newSqlDataAdapter(cmd);
DataSetds=newDataSet();
da.Fill(ds,"alltable");
this.Invoke((MethodInvoker)delegate
{
this.lboxAll.DataSource=ds.Tables["alltable"].DefaultView;
this.lboxAll.DisplayMember="tname";
});
}
catch(Exceptionx)
{
MessageBox.Show(x.Message,"錯誤",MessageBoxButtons.OK,MessageBoxIcon.Information);
}
finally
{
if(conn.State==ConnectionState.Open)
{
conn.Close();
}
}
}
privatevoidExpSQL()
{
this.sw=newStreamWriter(this.path,true,Encoding.Default);
try
{
this.conn.Open();
for(inti=0;i<this.lboxSelected.Items.Count;i++)
{
this.cmd.CommandText="selectsysobjects.nametable_name,syscolumns.name
column_name,systypes.namedata_type,syscolumns.isnullable,
syscolumns.length,syscolumns.prec,syscolumns.scale";
this.cmd.CommandText+=Environment.NewLine+"fromsysobjects";1