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 ...
随机推荐
- dojo chart生成函数
写了一个函数,就是通过传递参数,生成图表,代码如下: /** * created by LZUGIS * @param container * @param type * @param data * ...
- 前端之jQuery02
文档操作 重点:创建标签,jQuery里面没有这个方法 内部(子标签) 添加到指定元素内部后面 $(A).append(B): // B作为A的最后一个儿子元素:(把B追加到A) $(A).appen ...
- android 进制转换方法
import android.util.Log; public class CommandHelper { public static String intToHexString(int value) ...
- HihoCoder 1183 : 连通性一·割边与割点(模板)
连通性一·割边与割点 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 还记得上次小Hi和小Ho学校被黑客攻击的事情么,那一次攻击最后造成了学校网络数据的丢失.为了避免再次 ...
- Luogu 2530 化工厂装箱员
Written with StackEdit. Description \(118\)号工厂是世界唯一秘密提炼锎的化工厂,由于提炼锎的难度非常高,技术不是十分完善,所以工厂生产的锎成品可能会有\(3\ ...
- VC++ windows开机自启动设置
设置开机启动 很多软件要求软件能够在开机时自启动,下面讲讲如何设置开机自启动. Windows设置程序的开机启动的方法有很多,这里只讲其中的一种,该方法同时适用于32位和64位的操作系统,只需将需要开 ...
- 转载.Avalon-MM 阿窝龙妹妹应用笔记
Avalon Interface Special http://www.altera.com.cn/literature/manual/mnl_avalon_spec.pdf Avalon总线是SOP ...
- C#获取文件的MD5码
using System; using System.IO; using System.Security.Cryptography; using System.Text; namespace Send ...
- 为什么新生代内存需要有两个Survivor区?
对于常见的GC算法,我们都应该知道,例如:标记清除算法.复制算法.标记整理算法等.标记清除算法由于回收之后存在大量的内存碎片,存在效率和空间问题!为了解决效率问题,引出了复制算法!熟悉GC算法的小伙伴 ...
- SQL语言分为五大类
SQL语言分为五大类:DDL(数据定义语言) - Create.Alter.Drop 这些语句自动提交,无需用Commit提交.DQL(数据查询语言) - Select 查询语句不存在提交问题.DML ...