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 ...
随机推荐
- Android Volley的基本用法
1. Volley简介 我们平时在开发Android应用的时候不可避免地都需要用到网络技术,而多数情况下应用程序都会使用HTTP协议来发送和接收网络数据.Android系统中主要提供了两种方式来进行H ...
- MySQL 的中文乱码问题终结
中文正确 1:保存sql脚本文件 utf8 !!!!! ANSI<-->GBK 2:打开mysql窗口 SET NAMES UTF8; 每次新打开窗口执行指令 3:SOURCE d:/1. ...
- Android预安装可卸载程序
/***************************************************************************** * Android预安装可卸载程序 * 说 ...
- I.MX6 fbset 使用
/****************************************************************************** * I.MX6 fbset 使用 * 说 ...
- Java进阶知识点7:不要只会写synchronized - JDK十大并发编程组件总结
一.背景 提到Java中的并发编程,首先想到的便是使用synchronized代码块,保证代码块在并发环境下有序执行,从而避免冲突.如果涉及多线程间通信,可以再在synchronized代码块中使用w ...
- POJ 2029 Palindromes _easy version
#include<cstdio> #include<cstring> using namespace std; int main() { int n; ]; scanf(&qu ...
- bzoj 4472 salesman
Written with StackEdit. Description 某售货员小\(T\) 要到若干城镇去推销商品,由于该地区是交通不便的山区,任意两个城镇 之间都只有唯一的可能经过其它城镇的路线. ...
- 剑指offer-第五章优化时间和空间效率(连续子数组的最大和)
题目:输入一个数组,数组中有正也有负,数组中连续的一个或者连续的多个数字组成一个子数组.求所有的子数组和的最大值.要求时间复杂度为O(n) 思路:我们的最直观的想法就是求出这个数组中的所有的子数组,然 ...
- WCF 配置文件
<?xml version="1.0" encoding="utf-8" ?> <configuration> <system.S ...
- LeetCode Find Duplicate File in System
原题链接在这里:https://leetcode.com/problems/find-duplicate-file-in-system/description/ 题目: Given a list of ...