大概思路是: 读取文件 根据文件中行内容为GO 作为分割  一条条放到list中 然后在程序中逐条执行sql语句;

值得一提的是 创建数据库的语句是不允许放到程序事务中执行的 所以目前我是分了两个文本文件  先执行创建数据库的语句 把数据库创建完成 再通过事务执行建表 存储过程等的语句;

目前没有找到可以一起执行创建的方法 如果有朋友有解决的方法还望能够指教一下

代码贴上:

首先创建数据库:

           string con = System.Configuration.ConfigurationManager.AppSettings["create"];    
/// <summary>
/// 创建数据库
/// </summary>
/// <param name="fileName"></param>
/// <param name="str1"></param>
/// <param name="str2"></param>
/// <param name="dbname"></param>
/// <param name="partschemeName"></param>
/// <returns></returns>
public bool CreateBase(string fileName, string str1, string str2, string dbname, string partschemeName)
{
ArrayList list = GetSqlListFromFile(fileName, str1, str2, dbname, partschemeName);
return ExecuteCommand4CreateDataBase(list, con);
} /// <summary>
/// 创建数据库
/// </summary>
/// <param name="list"></param>
/// <param name="connString"></param>
/// <returns></returns>
public bool ExecuteCommand4CreateDataBase(ArrayList list, string connString)
{
SqlConnection MyConnection = new SqlConnection(connString);
MyConnection.Open();
SqlCommand command = new SqlCommand();
command.Connection = MyConnection;
try
{
foreach (string commandText in list)
{
command.CommandText = commandText;
command.ExecuteNonQuery();
}
return true;
}
catch (Exception ex)
{
throw ex;
}
finally
{
MyConnection.Close();
}
}     /// <summary>
/// 获取文件内的sql语句list
/// </summary>
/// <param name="fileName"></param>
/// <param name="str1">文件中数据库名字</param>
/// <param name="str2">文件中数据库分区方案名字</param>
/// <param name="dbname">新创建的数据库名字</param>
/// <param name="partschemeName">新创建的数据库分区方案名称</param>
/// <returns></returns>
public ArrayList GetSqlListFromFile(string fileName, string str1, string str2, string dbname, string partschemeName)
{
ArrayList sqlList = new ArrayList();
if (!File.Exists(fileName))
{
return sqlList;
}
StreamReader rs = new StreamReader(fileName, System.Text.Encoding.Default);
string commandText = "";
string line = "";
while (rs.Peek() > -1)
{
line = rs.ReadLine();
if (line == "")
{
continue;
}
if (line != "GO" && line != "go")
{
commandText += line;
commandText = commandText.Replace(str1, dbname);
commandText = commandText.Replace(str2, partschemeName);
commandText += "\r\n";
}
else
{
sqlList.Add(commandText);
commandText = "";
}
} rs.Close();
return sqlList;
}

然后通过事务创建表以及存储过程等:

    
/// <summary>
/// 创建表 存储过程等
/// </summary>
/// <param name="fileName"></param>
/// <param name="str1"></param>
/// <param name="str2"></param>
/// <param name="dbname"></param>
/// <param name="partschemeName"></param>
/// <returns></returns>
public bool CreateTable(string fileName, string str1, string str2, string dbname, string partschemeName)
{
ArrayList list = GetSqlListFromFile(fileName, str1, str2, dbname, partschemeName);
return ExecuteCommand(list, con);
}      /// <summary>
/// 创建数据表 存储过程等(事务)
/// </summary>
/// <param name="sqlList"></param>
/// <param name="connString"></param>
/// <returns></returns>
public bool ExecuteCommand(ArrayList sqlList, string connString)
{ SqlConnection MyConnection = new SqlConnection(connString);
MyConnection.Open();
SqlTransaction trans = MyConnection.BeginTransaction();
SqlCommand command = new SqlCommand();
command.Connection = MyConnection;
command.Transaction = trans;
try
{
foreach (string commandText in sqlList)
{
command.CommandText = commandText;
command.ExecuteNonQuery();
}
trans.Commit();
return true;
}
catch (Exception ex)
{
trans.Rollback();
throw ex;
}
finally
{
MyConnection.Close();
}
}

  以上。

C# 读取文件中的sql语句 创建数据库以及表结构的更多相关文章

  1. MySQL数据库执行sql语句创建数据库和表提示The 'InnoDB' feature is disabled; you need MySQL built with 'InnoDB' to have it working

    MySQL创建数据库 只想sql文件创建表时候提示 The 'InnoDB' feature is disabled; you need MySQL built with 'InnoDB' to ha ...

  2. sql语句创建数据库和表

    sql代码 -- 新建数据库 create database 数据库名称 on primary ( name='xx', filename='E:\xx.mdf', --文件地址 size=20MB, ...

  3. SQL语句创建数据库及表

    --删除数据库drop database ArchiveDev; --建立归档数据库CREATE DATABASE ArchiveDev; USE ArchiveDev;GO --1.建立归档计划执行 ...

  4. 【转载】C#常用数据库Sqlserver通过SQL语句查询数据库以及表的大小

    在Sqlserver数据库中,一般我们查看数据库的大小可以通过查找到数据库文件来查看,但如果要查找数据表Table的大小的话,则不可通过此方法,在Sqlserver数据库中,提供了相应的SQL语句来查 ...

  5. mysql / pgsql 使用sql语句查询数据库所有表注释已经表字段注释

    mysql使用sql语句查询数据库所有表注释已经表字段注释(转载)   场景: 1. 要查询数据库 "mammothcode" 下所有表名以及表注释 /* 查询数据库 ‘mammo ...

  6. 使用SQL语句清空数据库所有表的数据

    使用SQL语句清空数据库所有表的数据 近来发现数据库过大,空间不足,因此打算将数据库的数据进行全面的清理,但表非常多,一张一张的清空,实在麻烦,因此就想利用SQL语句一次清空所有数据.找到了三种方法进 ...

  7. SQL语句创建数据库,SQL语句删除数据库,SQL语句创建表,SQL语句删除表,SQL语句添加约束,SQL语句删除约束

    创建数据库: CREATE DATABASE Test --要创建的数据库名称 ON PRIMARY ( --数据库文件的具体描述 NAME='Test_data', --主数据文件的逻辑名称 FIL ...

  8. 2-06使用SQL语句创建数据库3

    向现有数据库中添加文件组和数据文件几种方式以及步骤: 第一种:在视图下添加文件组和数据文件. 添加文件组的步骤: 右击你想要添加文件组的数据库点属性,然后点文件组就可以添加. 添加数据文件的步骤: 下 ...

  9. 2-05使用SQL语句创建数据库2

    使用SQL语句创建多个数据文件和日志文件: USE master--指向当前使用的数据库 GO--批处理的标志 CREATE DATABASE E_Market--创建E_market数据库 ON P ...

随机推荐

  1. 【MFC】VC界面绘制双缓存

    VC界面绘制双缓存 转载请注明原文网址: http://www.cnblogs.com/xianyunhe/archive/2011/11/20/2255811.html 1.闪屏的问题在GDI的绘图 ...

  2. linux 查看某文件是否正在使用(被读写)

    fuser功能 fuser 可以显示出当前哪个程序在使用磁盘上的某个文件.挂载点.甚至网络端口,并给出程序进程的详细信息.  fuser显示使用指定文件或者文件系统的进程ID.默认情况下每个文件名后面 ...

  3. MyBatis典型的错误org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)

    XXXmapper.java(接口) XXXmapper.xml(结果集映射) //此两个文件要在统一包下,且xml中的namespace是唯一的,为了区分须写成 该xml的全路径

  4. HDFS的工作原理扫扫盲

    问题导读: 1.什么是分布式文件系统? 2.怎样分离元数据和数据? 3.HDFS的原理是什么? Hadoop分布式文件系统(HDFS)是一种被设计成适合运行在通用硬件上的分布式文件系统.HDFS是一个 ...

  5. linux之 crontab 定时任务

    crontab命令被用来提交和管理用户的需要周期性执行的任务,与windows下的计划任务类似,当安装完成操作系统后,默认会安装此服务工具,并且会自动启动crond进程,crond进程每分钟会定期检查 ...

  6. (装)Android高性能编程基本规范

    最近总结了一些,Android应用开发中,需要注意的一些事项,与大家分享     1.尽量少的声明全局变量   2.声明全局静态变量,一定要加final声明   3.声明非静态的全局变量,最好不要初始 ...

  7. 使用spring框架的JdbcTemplate实现对Oracle数据库的简单操作实例

    最近实现了一个小功能,针对Oracle数据库两张关联表进行查询和修改,因为比较简单,所以选择了spring框架里的JdbcTemplate.JdbcTemplate算是老古董了,是当年spring为了 ...

  8. asp.net数据分页方法

    /// <summary> /// 数据分页方法 /// </summary> /// <param name="PageIndex">当前页& ...

  9. JSONObject转换Int类型--java.lang.Integer cannot be cast to java.lang.String

    参数 params={"abc":0} JSONObject转换Int类型 JSONObject json = JSONObject.fromObject(params); if ...

  10. 【转】Jmeter的正则表达式未正确提取数据

    在进行脚本调试时,在Apply-Money-Page中需要Save-base中header的id参数,采用正则表达式提取器获取 使用正则表达式提取器,结果无法获取到需要的参数 最后定位是因为[?]是一 ...