日期:2014-05-18  浏览次数:21003 次

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

------解决方案--------------------
用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
------解决方案--------------------
楼上的应该是正解
要注意必须使用管理员身份登录,才能获取存储过程
------解决方案--------------------
把owner改成dbo
------解决方案--------------------
SQLDMO是分布式管理对象的意思
他的文件路径在C:\Program Files\Microsoft SQL Server\80\Tools\Binn
引用它的话就是右键项目---添加引用--浏览---C:\Program Files\Microsoft SQL Server\80\Tools\Binn---打开---确定
然后再using SQLDMO;这样就OK了
------解决方案--------------------
127.0.0.1
改为服务器名看看
------解决方案--------------------

直接写成个方法好了!下面是可以直接导出多个表的建表脚本!仅供参考!

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);
}
}
}
------解决方案--------------------