C# 读取文件中的sql语句 创建数据库以及表结构
大概思路是: 读取文件 根据文件中行内容为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语句 创建数据库以及表结构的更多相关文章
- 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 ...
- sql语句创建数据库和表
sql代码 -- 新建数据库 create database 数据库名称 on primary ( name='xx', filename='E:\xx.mdf', --文件地址 size=20MB, ...
- SQL语句创建数据库及表
--删除数据库drop database ArchiveDev; --建立归档数据库CREATE DATABASE ArchiveDev; USE ArchiveDev;GO --1.建立归档计划执行 ...
- 【转载】C#常用数据库Sqlserver通过SQL语句查询数据库以及表的大小
在Sqlserver数据库中,一般我们查看数据库的大小可以通过查找到数据库文件来查看,但如果要查找数据表Table的大小的话,则不可通过此方法,在Sqlserver数据库中,提供了相应的SQL语句来查 ...
- mysql / pgsql 使用sql语句查询数据库所有表注释已经表字段注释
mysql使用sql语句查询数据库所有表注释已经表字段注释(转载) 场景: 1. 要查询数据库 "mammothcode" 下所有表名以及表注释 /* 查询数据库 ‘mammo ...
- 使用SQL语句清空数据库所有表的数据
使用SQL语句清空数据库所有表的数据 近来发现数据库过大,空间不足,因此打算将数据库的数据进行全面的清理,但表非常多,一张一张的清空,实在麻烦,因此就想利用SQL语句一次清空所有数据.找到了三种方法进 ...
- SQL语句创建数据库,SQL语句删除数据库,SQL语句创建表,SQL语句删除表,SQL语句添加约束,SQL语句删除约束
创建数据库: CREATE DATABASE Test --要创建的数据库名称 ON PRIMARY ( --数据库文件的具体描述 NAME='Test_data', --主数据文件的逻辑名称 FIL ...
- 2-06使用SQL语句创建数据库3
向现有数据库中添加文件组和数据文件几种方式以及步骤: 第一种:在视图下添加文件组和数据文件. 添加文件组的步骤: 右击你想要添加文件组的数据库点属性,然后点文件组就可以添加. 添加数据文件的步骤: 下 ...
- 2-05使用SQL语句创建数据库2
使用SQL语句创建多个数据文件和日志文件: USE master--指向当前使用的数据库 GO--批处理的标志 CREATE DATABASE E_Market--创建E_market数据库 ON P ...
随机推荐
- S2SH框架中的无刷新验证码功能实现
暑假期间在实验室做使用S2SH框架的项目,其中登录和注册需要验证码,实现了一个没有实现刷新验证码功能的简单版本,代码如下: 1 package com.sem.action; 2 3 import j ...
- macOS Ruby版本需要升级到2.2.2以上
在安装 Ruby on Rails 时遇到问题,提示依赖 ruby 2.2.2 或更高的版本. ERROR: Error installing rails: activesupport require ...
- (七)java转译字符与连接字符串
转义字符:通过“\”来改变后面字符的意义 \n空格 \t相当于table键 \b相当于回退 class Zyzf { public static void main(String[] args) { ...
- 设置一个严格的SESSION过期时间
认识一:当我们需要更改session生存时间的时候通行的做法是更改php.ini文件中 1: ; Name of the session (used as cookie name). 2: sessi ...
- linux中磁盘分区以及如何将磁盘挂载到系统中
fdisk 分区 fdisk /dev/sdb -p查看当前分区-t 改分区号-w将分区表写进磁盘-n创建分区 -p主分区 -e拓展分区 partprobe 让内核更新分区信息cat /proc/pa ...
- shh整合后web.xml、spring配置文件和struts.xml的内容
1:web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app version=" ...
- 洛谷 P1312 Mayan游戏
题解:搜索+模拟 剪枝: 最优性剪枝:x从小到大,y从小到大,第一次搜到的就是字典序最小 的最优解. 最优性剪枝:把一个格子和左边格子交换,和左边格子和右边格 子交换是等价的,显然让左边格子和右边交换 ...
- 【转】Python自动化测试 (一) Eclipse+Pydev 搭建开发环境
原文网址:http://www.cnblogs.com/TankXiao/archive/2013/05/29/3033640.html C#之所以容易让人感兴趣,是因为安装完Visual Studi ...
- svn服务器端回退版本 (转)
由于误操作,不小心将错误的代码提交到了svn上,于是想在服务器上撤销本次提交,经过尝试,发现进行以下步骤的操作即可彻底删除本次提交: 1.首先找到本次提交后生成的版本号,例如为r224. 2.登录到s ...
- 日志jar包冲突报错:Class path contains multiple SLF4J bindings
问题现象:tomcat启动卡死,报错日志如下: 十一月 07, 2017 8:35:45 下午 org.apache.catalina.core.ApplicationContext log 信息: ...