第一种方法
最简单的方法就是调用 osql.exe .
具体方法如下(以sql server200 数据库为例):
try
{
System.Diagnostics.Process pr = new System.Diagnostics.Process();
pr.StartInfo.FileName = "osql.exe ";
pr.StartInfo.Arguments = "-U sa -P sa -d master -s 127.0.0.1 -i Sql.sql";
pr.StartInfo.UseShellExecute = false;
pr.StartInfo.RedirectStandardOutput = true; //重定向输出
pr.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;//隐藏输出窗口
pr.Start();
System.IO.StreamReader sr = pr.StandardOutput;
Console.WriteLine(sr.ReadToEnd());
pr.WaitForExit();
pr.Close();
}
catch(Exception err)
{
MessageBox.Show(err.ToString());
}
以下是osql的一些参数用法:
用法: osql [-U 登录 ID] [-P 密码]
[-S 服务器] [-H 主机名] [-E 可信连接]
[-d 使用数据库名称] [-l 登录超时值] [-t 查询超时值]
[-h 标题] [-s 列分隔符] [-w 列宽]
[-a 数据包大小] [-e 回显输入] [-I 允许带引号的标识符]
[-L 列出服务器] [-c 命令结束] [-D ODBC DSN 名称]
[-q "命令行查询"] [-Q "命令行查询" 并退出]
[-n 删除编号方式] [-m 错误级别]
[-r 发送到 stderr 的消息] [-V 严重级别]
[-i 输入文件] [-o 输出文件]
[-p 打印统计信息] [-b 出错时中止批处理]
[-X[1] 禁用命令,[退出的同时显示警告]]
[-O 使用旧 ISQL 行为禁用下列项]
第二种方法
先要添加sqldmo COM组件
COM 引用 "Microsoft SQLDMO Object Library"
SQLDMO.SQLServer2 sqlserver = new SQLDMO.SQLServer2Class();
sqlserver.Connect("192.168.100.240", "sa", "1234");
SQLDMO.Databases mydbs = sqlserver.Databases;
SQLDMO.Database mydb = new SQLDMO.DatabaseClass();
mydb = (SQLDMO.Database)mydbs.Item("master", "sa");
System.IO.StreamReader s = new System.IO.StreamReader(this.textBox1.Text);
string sql = s.ReadToEnd();
mydb.ExecuteImmediate(sql, SQLDMO.SQLDMO_EXEC_TYPE.SQLDMOExec_Default, sql.Length);
如果是建立数据库:见如下代码
SqlConnection conn=new SqlConnection("server=(local);user=sa;pwd=;database=master");
SqlCommand cmd=new SqlCommand("CREATE DATABASE [我的数据库] COLLATE Chinese_PRC_CI_AS;",conn);
cmd.Connection.Open();
cmd.ExecuteNonQuery();
cmd.Connection.Close();
#region 這段代碼只能執行<沒有GO的.SQL文件>
private string GetSql(string Name)
{
try
{
Assembly Asm = Assembly.GetExecutingAssembly();
Stream strm = Asm.GetManifestResourceStream(Asm.GetName().Name + "." + Name);
StreamReader reader = new StreamReader(strm);
return reader.ReadToEnd();
}
catch (Exception ex)
{
Console.Write("In GetSql:" + ex.Message);
throw ex;
}
}
private void ExecuteSql(string DataBaseName, string Sql)
{
System.Data.SqlClient.SqlConnection conn=new System.Data.SqlClient.SqlConnection ("Password=1234;Persist Security Info=True;User ID=sa;Initial Catalog=master;Data Source=192.168.100.240");
System.Data.SqlClient.SqlCommand Command = new System.Data.SqlClient.SqlCommand(Sql,conn);
Command.Connection.Open();
Command.Connection.ChangeDatabase(DataBaseName);
try
{
Command.ExecuteNonQuery();
}
finally
{
Command.Connection.Close();
}
}
/// <summary>
/// 分析msSqlServer文件*.sql
/// </summary>
/// <param name="m_SqlFilePath">文件路径</param>
/// <returns></returns>
private string GetExcuteSql(string m_SqlFilePath)
{
string m_ReturnStr = "";
StreamReader sr = File.OpenText(m_SqlFilePath);
//string s = sr.ReadLine();
string sa = sr.ReadToEnd();
StringBuilder sb = new StringBuilder();
//while (s != null)
//{
// if (s.Replace(" ", "") == "GO")
// sb.Append(";");
// else
// sb.Append(s+" ");
// s = sr.ReadLine();
//}
m_ReturnStr = sb.ToString();
sr.Close();
//return m_ReturnStr;
return sa;
}
#endregion
private void Button1_Click(object sender, EventArgs e)
{
//ExecuteSql(strDBName, GetSql("sql.txt"));
//ExecuteSql("master", GetSql(this.textBox1.Text));
//ExecuteSql("master", GetExcuteSql(this.textBox1.Text));
this.ExecSqlFile();
}