用于sql脚本执行的c#
本文关键字:执行 脚本 sql 用于 | 更新日期: 2023-09-27 18:27:50
我有两个表单,首先收集数据源、数据库名称、用户名和密码等详细信息。第二个表单收集要执行的sql脚本文件和要连接到的数据库名称。
我想要实现的是,我应该能够在选定的数据库中执行sql脚本文件。
第二种形式中使用的代码如下:
private void comboBox1_TextChanged(object sender, EventArgs e)
{
string sel = comboBox1.SelectedItem.ToString(); //Here "sel" is the database selected
if (sel == "master")
{
comboBox2.Items.Clear();
//Selects a default file
DirectoryInfo dinfo = new DirectoryInfo(@"D:'Testpgm");
FileInfo[] Files = dinfo.GetFiles("master.sql", SearchOption.AllDirectories);
foreach (FileInfo file in Files)
{
comboBox2.Items.Add(file.Name);
}
}
else
{
comboBox2.Items.Clear();
//Selects a default file
DirectoryInfo dinfo = new DirectoryInfo(@"D:'Testpgm");
FileInfo[] Files = dinfo.GetFiles("dbscript.sql", SearchOption.AllDirectories);
foreach (FileInfo file in Files)
{
comboBox2.Items.Add(file.Name);
}
}
}
组合框2中使用的代码是:
private void comboBox2_TextChanged(object sender, EventArgs e)
{
string textsel = comboBox2.SelectedItem.ToString(); //textsel is used to select the sql file selected
if (textsel == "master.sql")
{
richTextBox1.Clear();
//Read the selected sql file and display it in richtextbox
System.IO.StreamReader myFile = new System.IO.StreamReader(@"D:'Testpgm'master.sql");
string textentry = myFile.ReadToEnd();
richTextBox1.AppendText(textentry);
}
else
{
richTextBox1.Clear();
//Read the selected sql file and display it in richtextbox
System.IO.StreamReader myFile = new System.IO.StreamReader(@"D:'Testpgm'dbscript.sql");
string textentry = myFile.ReadToEnd();
richTextBox1.AppendText(textentry);
}
}
现在,我想连接到我在组合框1中选择的数据库,然后单击按钮,优化组合框2中选择的sql文件中包含的sql脚本。
这可能吗?我怎样才能做到这一点?
任何意见都将非常有用,并表示感谢。。
通过使用
using Microsoft.SqlServer.Management.Common;
using Microsoft.SqlServer.Management.Smo;
你可以按照下面的
SqlConnection conn = new SqlConnection(sqlConnectionString);
Server server = new Server(new ServerConnection(conn));
server.ConnectionContext.ExecuteNonQuery(script);
这可能吗?我怎样才能做到这一点?
如果数据库和脚本文件都要执行,那么是的,这是可能的。
首先,您需要获取所选数据库的连接字符串并建立连接。然后,您可以使用SMO对象来执行批处理查询。
string connectionString = "YourConnectionString";
//make a sql connection
using (var sqlConnection = new SqlConnection(connectionString))
{
var serverConnection = new ServerConnection(sqlConnection);
var server = new Server(serverConnection);
server.ConnectionContext.ExecuteNonQuery(textentry);
}
注意:如果没有要执行的批处理语句,则应考虑使用普通查询。由于使用smo对象可能会遇到很多问题,