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 ...
随机推荐
- Django之 路由系统
Django的路由系统 URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表:你就是以这种方式告诉Django,对于这个URL调用这 ...
- python学习之模块&包的引用
名词解释: 模块:一个程序文件 包:相当于一个类库,打包发布后相当于c#中的dll, 包中可包括若干个模块,比如main.py就是一个模块,对于test2文件下的所有模块组成一个包 对于一个包而言,注 ...
- BZOJ - 5427:最长上升子序列 (二分&思维)
现在给你一个长度为n的整数序列,其中有一些数已经模糊不清了,现在请你任意确定这些整数的值, 使得最长上升子序列最长.(为何最长呢?因为hxy向来对自己的rp很有信心) Input 第一行一个正整数 ...
- Luogu 2530 化工厂装箱员
Written with StackEdit. Description \(118\)号工厂是世界唯一秘密提炼锎的化工厂,由于提炼锎的难度非常高,技术不是十分完善,所以工厂生产的锎成品可能会有\(3\ ...
- latch的产生和消除
一直都知道fpga中有latch这么一回事,但是一直都不太清楚到底什么是锁存器,它是怎么产生的,它到底和寄存器有多少区别,它怎么消除.为什么说他不好? 一,是什么 锁存器是一种在异步时序电路系统中,对 ...
- loj #6138. 「2017 山东三轮集训 Day4」Right
题目: 题解: 暴力一波 \(SG\) 函数可以发现这么一个规律: \(p\) 为奇数的时候 : \(SG(n) = n \% 2\) \(p\) 为偶数的时候 : \(SG(n) = n \% (p ...
- UVA10674 Tangents
题意 PDF 分析 就是圆的切线的模板. 注意精度问题,排序的时候也不能直接写,被卡了好几次. 时间复杂度\(O(T)\) 代码 #include<iostream> #include&l ...
- goreplay(gor) golang 流量拷贝工具试用
1. 项目地址 https://github.com/buger/goreplay 2. 安装 wget https://github.com/buger/goreplay/releases/down ...
- 学习动态性能表(4)--v$sqltext&v$sqlarea
学习动态性能表 第四篇-(1)-V$SQLTEXT 2007.5.29 本视图包括Shared pool中SQL语句的完整文本,一条SQL语句可能分成多个块被保存于多个记录内. 注:V$SQLARE ...
- C#检测应用程序重复启动----函数检测(可以在多用户登录情况下检测)
上文是在网上找的检测程序重复运行的类,但是感觉不是很好用,而且还使用了API,似乎完全没有必要,于是晚上自己写了一个函数,经过测试,在多用户下仍然可以检测到程序的多次运行.当然,如果程序改了名字还是可 ...