在.net中执行SQL脚本

本文章主要是摘自网上发表的文章,加以整理而成。

一, osql.exe

    osql.exe 可以执行基于ODBC驱动的数据库脚本。假设使用sqlserver2000

具体方法如下(以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 行为禁用下列项]

二、把文件内容读出来,拼接成一个大的字符串执行。

     好处可以使用事务,弊端文件太大执行速度非常慢。

  

源: http://zhidao.baidu.com/question/5367984.html?si=2

using System;
using System.Xml;
using System.Data;
using System.IO;
using System.Collections;
using System.Data.SqlClient;

namespace ExecuteSqlFile
{
/// <summary>
/// DBAccess 的摘要说明。
/// </summary>
public class DBAccess
{
public DBAccess()
{
}

#region 属性

private static string ConStr = "";

private static string ConString
{
get
{
if(ConStr == "")
{
try
{
XmlDocument doc = new XmlDocument();
doc.Load("ServerConfig.xml");

string userid = doc.SelectSingleNode("ServerConfig/UserId").InnerText;
string password = doc.SelectSingleNode("ServerConfig/PassWord").InnerText;
string servername = doc.SelectSingleNode("ServerConfig/ServerName").InnerText;
string database = doc.SelectSingleNode("ServerConfig/DataBase").InnerText;
ConStr = "server = " + servername + ";uid = "
+ userid + ";pwd = " + password + ";database = " + database;
}
catch(Exception ex)
{
throw ex;
}
}

return ConStr;
}
}

private static SqlConnection Con;


public static SqlConnection MyConnection
{
get
{
if(Con == null)
{
Con = new SqlConnection(ConString);
}
return Con;
}
}

#endregion


/// <summary>
/// 执行Sql文件
/// </summary>
/// <param name="varFileName"></param>
/// <returns></returns>
public static bool ExecuteSqlFile(string varFileName)
{
if(!File.Exists(varFileName))
{
return false;
}

StreamReader sr = File.OpenText(varFileName);

ArrayList alSql = new ArrayList();

string commandText = "";

string varLine = "";

while(sr.Peek() > -1)
{
varLine = sr.ReadLine();
if(varLine == "")
{
continue;
}
if(varLine != "GO")
{
commandText += varLine;
commandText += "\r\n";
}
else
{
alSql.Add(commandText);
commandText = "";
}
}

sr.Close();

try
{
ExecuteCommand(alSql);
}
catch
{
return false;
}

return true;
}


private static void ExecuteCommand(ArrayList varSqlList)
{
MyConnection.Open();
SqlTransaction varTrans = MyConnection.BeginTransaction();

SqlCommand command = new SqlCommand();
command.Connection = MyConnection;
command.Transaction = varTrans;

try
{
foreach(string varcommandText in varSqlList)
{
command.CommandText = varcommandText;
command.ExecuteNonQuery();
}
varTrans.Commit();
}
catch(Exception ex)
{
varTrans.Rollback();
throw ex;
}
finally
{
MyConnection.Close();
}
}
}
}



配置文件如下:
<?xml version="1.0" encoding="utf-8" ?>
<ServerConfig>
<ServerName>localhost</ServerName>
<DataBase>tttttt</DataBase>
<UserId>sa</UserId>
<PassWord>sa</PassWord>
</ServerConfig>
保存为ServerConfig.xml
放到Bin/Debug/里面




调用如下:
DBAccess.ExecuteSqlFile(@"E:\My Document\MySql\test1.sql");

 

 

转载于:https://www.cnblogs.com/whz111/articles/2421188.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值