*********关于执行.Sql脚本(SqlSERVER)*********

brightheroes 2004-04-22 11:41:33
在帖子中
http://expert.csdn.net/Expert/topic/2986/2986773.xml?temp=.2011835
楼主询问关于从Sql Server导出的脚本如何执行

最后大概是采用了SqlServer自带的osql.exe,或者是isql.exe来执行。
当然我不知道楼主的用处,但是,我想,如果仅仅是执行一个脚本文件,大概我们不需要调用外部的exe文件来作,而且我试验过,调用的速度很慢。

其实,之所以产生“直接从SQL SERVER2K导出脚本,将其使用SQLCommand执行。出现异常,求救”这样的问题,关键在于,生成的脚本中有"GO"这个关键字,只要我们过滤掉这个关键字,事情就解决了
...全文
456 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
ddggggdd 2004-07-21
  • 打赏
  • 举报
回复
有收获
brightheroes 2004-07-21
  • 打赏
  • 举报
回复
to cxqhust1()
那是你的顺序不对导致的问题
没有表呢
怎么创建视图和存储过程
wszl 2004-06-30
  • 打赏
  • 举报
回复
mark
cxqhust1 2004-05-12
  • 打赏
  • 举报
回复
有谁能在asp.net程序中批量执行生成存储过程和视图的sql脚本呢
cxqhust1 2004-05-12
  • 打赏
  • 举报
回复
有存储过程和视图是不行的!!!!!!!
houjianxun 2004-05-11
  • 打赏
  • 举报
回复
如果在没有SqlServer的机器上,你还要怎样恢复数据库呢?
laorer 2004-05-10
  • 打赏
  • 举报
回复
学到了不少,还有吗
pcuser 2004-05-10
  • 打赏
  • 举报
回复
兄弟,不错,但以后养成写注释的习惯。
Jackile 2004-05-07
  • 打赏
  • 举报
回复
长见识了!
delphi1998 2004-04-26
  • 打赏
  • 举报
回复
如果有存储过程,依然可以吗?
brightheroes 2004-04-22
  • 打赏
  • 举报
回复
调用示例:DBAccess.ExecuteSqlFile(@"E:\My Document\MySql\test1.sql");

test1.sql是sqlserver自动生成的一个文件,大致内容如下:

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[Forum_Users_Class]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[Forum_Users_Class]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[Forum_Users_Config]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[Forum_Users_Config]
GO

CREATE TABLE [dbo].[Address] (
[ip1] [float] NULL ,
[ip2] [float] NULL ,
[country] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[city] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[Forum_Admin] (
[Forum_Admin_Id] [int] NOT NULL ,
[Forum_Admin_Name] [nvarchar] (255) COLLATE Chinese_PRC_CI_AS NULL ,
[Forum_Admin_Pwd] [nvarchar] (255) COLLATE Chinese_PRC_CI_AS NULL ,
[Isdel] [nvarchar] (1) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]
GO

.....
brightheroes 2004-04-22
  • 打赏
  • 举报
回复
XML配置文件,放在你的debug文件夹下面,保存为ServerConfig.xml

<?xml version="1.0" encoding="utf-8" ?>
<ServerConfig>
<ServerName>localhost</ServerName>
<DataBase>tttttt</DataBase>
<UserId>sa</UserId>
<PassWord>sa</PassWord>
</ServerConfig>
brightheroes 2004-04-22
  • 打赏
  • 举报
回复
.cs文件


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();
}
}
}
}
brightheroes 2004-04-22
  • 打赏
  • 举报
回复
to duxn(嘟嘟)
你说的那个当然是可以的,问题在于要做什么用处,在cmd里面输入osql回车,方法列的很详细,如果我要在一台没有安装SqlServer的机器上进行一些操作呢?
cuike519 2004-04-22
  • 打赏
  • 举报
回复
强烈支持!
duxn 2004-04-22
  • 打赏
  • 举报
回复
osql -S 服务器名 -E -i *.sql
可导入结构
HenryArsenal 2004-04-22
  • 打赏
  • 举报
回复
up

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧