大概思路是: 读取文件 根据文件中行内容为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 &#39;InnoDB&#39; feature is disabled; you need MySQL built with &#39;InnoDB&#39; 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 ...
随机推荐
-
gitlab安装过程总结
gitlab总算搭建好了,今天下午完成了第一个工程的导入. 梳理下搭建的过程: 1.下载bitnami的一键安装包,并安装 注意设置权限为777,以免出现某文件写入错误的问题 2.配置邮件服务 分别修 ...
-
第二百二十八天 how can I 坚持
hibernate 还有好多不会搞啊,本来很简单的东西,没用过就不会. 今天... 只是感觉很累,昨天爬山爬的,不知道该写点啥了,买的羽绒服到了,还行吧,凑合穿吧. 睡觉了.今天貌似又发脾气了.哎.. ...
-
OC7_目录操作
// // main.m // OC7_目录操作 // // Created by zhangxueming on 15/6/19. // Copyright (c) 2015年 zhangxuemi ...
-
cmake学习笔记(五)
在cmake 学习笔记(三) 中简单学习了 find_package 的 model 模式,在cmake 学习笔记(四)中了解一个CMakeCache相关的东西.但靠这些知识还是不能看懂PySide使 ...
-
php后台开源框架
1,OneBase 官网首页:https://onebase.org 后台演示:https://demo.onebase.org/admin.php 接口演示:https://demo.onebase ...
-
webpack 代码分割一点事
webpack 俨然已经成为前端最主流的构建工具,其功能多种多样,我们今天就来分析下关于代码分割这部分的一点事,并在最后讲述如何实现在webpack编译出的代码里手动添加一个异步chunk. 什么是c ...
-
mongodb主从(副本集附仲裁节点)部署带认证模式
环境:OS:CentOS 7DB:3.0.15机器角色:192.168.1.134:10001 主192.168.1.135:10002 从192.168.1.135:10003 仲裁节点 1.下载相 ...
-
基于Asp.Net Core Mvc和EntityFramework Core 的实战入门教程系列-5
来个目录吧: 第一章-入门 第二章- Entity Framework Core Nuget包管理 第三章-创建.修改.删除.查询 第四章-排序.过滤.分页.分组 第五章-迁移,EF Core 的co ...
-
第六周分析Linux内核创建一个新进程的过程
潘恒 原创作品转载请注明出处<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 task_struct结构: ...
-
Python3.X 安装Scrapy
安装Scrapy有两种方法: 1.pip install Scrapy 这种方式按道理来说是最简洁最快速的,但是有的时候安装不成功,只能更换一种方式,下载源文件安装的方式,详见下面一步. 2.下载文件 ...