我想用c#获取已经存在的数据库的创建脚本,数据表的创建脚本,存储过程的创建脚本,......
请高手指点!
小弟感激不尽!!!!!!!!!!

解决方案 »

  1.   

    用SqlDMO
     
    SQLDMO.SQLServer oServer = new SQLDMO.SQLServer(); 
    oServer.Connect("127.0.0.1", "sa", "sapassword"); 
    SQLDMO._Database mydb = oServer.Databases.Item("northwind", "owner"); 
    SQLDMO._Table myTable = mydb.Tables.Item("Categories", "dbo"); 
    string s = myTable.Script(SQLDMO.SQLDMO_SCRIPT_TYPE.SQLDMOScript_Default,null,null, SQLDMO.SQLDMO_SCRIPT2_TYPE.SQLDMOScript2_Default); 
    oServer.DisConnect(); 
    Source.Text = s
      

  2.   

    非常感谢各位大哥指点,无奈小弟还是不甚了解.请详细解释一下好吗?
    比如SQLDMO是什么类?
      

  3.   

    SQLDMO是分布式管理对象的意思
    他的文件路径在C:\Program Files\Microsoft SQL Server\80\Tools\Binn
    引用它的话就是右键项目---添加引用--浏览---C:\Program Files\Microsoft SQL Server\80\Tools\Binn---打开---确定
    然后再using SQLDMO;这样就OK了
      

  4.   

    oServer.Connect("127.0.0.1", "sa", "sapassword"); 
    这一行出问题了,提示"无效连接"??
      

  5.   


    直接写成个方法好了!下面是可以直接导出多个表的建表脚本!仅供参考!private string gettablescript(string server, string user, string pwd, string table, string database)
            {
                SQLDMO.SQLServer oServer = new SQLDMO.SQLServer();
                oServer.Connect(""+server+"", ""+user+"", ""+pwd+"");
                SQLDMO._Database mydb = oServer.Databases.Item(""+database+"", "owner");
                SQLDMO._Table myTable = mydb.Tables.Item(""+table+"", "dbo");
                string s = myTable.Script(SQLDMO.SQLDMO_SCRIPT_TYPE.SQLDMOScript_Default, null, null, SQLDMO.SQLDMO_SCRIPT2_TYPE.SQLDMOScript2_Default);
                oServer.DisConnect(); 
                return s;
            }
            /// <summary>
            /// 导出建表脚本
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void button4_Click(object sender, EventArgs e)
            {
                this.saveFileDialog1.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*";
                this.saveFileDialog1.ShowDialog();
                if (this.saveFileDialog1.FileName.ToString() == "")
                {
                    MessageBox.Show("未选择导出文件路径");
                }
                else
                {
                    try
                    {
                        using (StreamWriter sw = new StreamWriter(this.saveFileDialog1.FileName.ToString()))
                        {   
                            for (int j = 0; j < checkedListBox1.CheckedItems.Count; j++)
                            {
                                string ss = gettablescript(this.comboBox1.SelectedItem.ToString(), this.textBox2.Text, this.textBox1.Text, this.checkedListBox1.CheckedItems[j].ToString(), this.comboBox2.SelectedItem.ToString());
                                sw.WriteLine(ss);
                                MessageBox.Show("导出表脚本成功");
                            }
                        }                  
                    }
                    catch (Exception s)
                    {
                        MessageBox.Show(s.Message);
                    }
                }          
            }
      

  6.   

    参考
    http://topic.csdn.net/u/20080616/10/123ecf9b-e0de-4a16-94b9-091ebd60de5c.html