大概思路是: 读取文件 根据文件中行内容为GO 作为分割  一条条放到list中 然后在程序中逐条执行sql语句;

值得一提的是 创建数据库的语句是不允许放到程序事务中执行的 所以目前我是分了两个文本文件  先执行创建数据库的语句 把数据库创建完成 再通过事务执行建表 存储过程等的语句;

目前没有找到可以一起执行创建的方法 如果有朋友有解决的方法还望能够指教一下

代码贴上:

首先创建数据库:

  1.      string con = System.Configuration.ConfigurationManager.AppSettings["create"];    
  2. /// <summary>
  3. /// 创建数据库
  4. /// </summary>
  5. /// <param name="fileName"></param>
  6. /// <param name="str1"></param>
  7. /// <param name="str2"></param>
  8. /// <param name="dbname"></param>
  9. /// <param name="partschemeName"></param>
  10. /// <returns></returns>
  11. public bool CreateBase(string fileName, string str1, string str2, string dbname, string partschemeName)
  12. {
  13. ArrayList list = GetSqlListFromFile(fileName, str1, str2, dbname, partschemeName);
  14. return ExecuteCommand4CreateDataBase(list, con);
  15. }
  16.  
  17. /// <summary>
  18. /// 创建数据库
  19. /// </summary>
  20. /// <param name="list"></param>
  21. /// <param name="connString"></param>
  22. /// <returns></returns>
  23. public bool ExecuteCommand4CreateDataBase(ArrayList list, string connString)
  24. {
  25. SqlConnection MyConnection = new SqlConnection(connString);
  26. MyConnection.Open();
  27. SqlCommand command = new SqlCommand();
  28. command.Connection = MyConnection;
  29. try
  30. {
  31. foreach (string commandText in list)
  32. {
  33. command.CommandText = commandText;
  34. command.ExecuteNonQuery();
  35. }
  36. return true;
  37. }
  38. catch (Exception ex)
  39. {
  40. throw ex;
  41. }
  42. finally
  43. {
  44. MyConnection.Close();
  45. }
  46. }
  47.  
  48.     /// <summary>
  49. /// 获取文件内的sql语句list
  50. /// </summary>
  51. /// <param name="fileName"></param>
  52. /// <param name="str1">文件中数据库名字</param>
  53. /// <param name="str2">文件中数据库分区方案名字</param>
  54. /// <param name="dbname">新创建的数据库名字</param>
  55. /// <param name="partschemeName">新创建的数据库分区方案名称</param>
  56. /// <returns></returns>
  57. public ArrayList GetSqlListFromFile(string fileName, string str1, string str2, string dbname, string partschemeName)
  58. {
  59. ArrayList sqlList = new ArrayList();
  60. if (!File.Exists(fileName))
  61. {
  62. return sqlList;
  63. }
  64. StreamReader rs = new StreamReader(fileName, System.Text.Encoding.Default);
  65. string commandText = "";
  66. string line = "";
  67. while (rs.Peek() > -1)
  68. {
  69. line = rs.ReadLine();
  70. if (line == "")
  71. {
  72. continue;
  73. }
  74. if (line != "GO" && line != "go")
  75. {
  76. commandText += line;
  77. commandText = commandText.Replace(str1, dbname);
  78. commandText = commandText.Replace(str2, partschemeName);
  79. commandText += "\r\n";
  80. }
  81. else
  82. {
  83. sqlList.Add(commandText);
  84. commandText = "";
  85. }
  86. }
  87.  
  88. rs.Close();
  89. return sqlList;
  90. }

然后通过事务创建表以及存储过程等:

  1.     
  2. /// <summary>
  3. /// 创建表 存储过程等
  4. /// </summary>
  5. /// <param name="fileName"></param>
  6. /// <param name="str1"></param>
  7. /// <param name="str2"></param>
  8. /// <param name="dbname"></param>
  9. /// <param name="partschemeName"></param>
  10. /// <returns></returns>
  11. public bool CreateTable(string fileName, string str1, string str2, string dbname, string partschemeName)
  12. {
  13. ArrayList list = GetSqlListFromFile(fileName, str1, str2, dbname, partschemeName);
  14. return ExecuteCommand(list, con);
  15. }
  16.  
  17.      /// <summary>
  18. /// 创建数据表 存储过程等(事务)
  19. /// </summary>
  20. /// <param name="sqlList"></param>
  21. /// <param name="connString"></param>
  22. /// <returns></returns>
  23. public bool ExecuteCommand(ArrayList sqlList, string connString)
  24. {
  25.  
  26. SqlConnection MyConnection = new SqlConnection(connString);
  27. MyConnection.Open();
  28. SqlTransaction trans = MyConnection.BeginTransaction();
  29. SqlCommand command = new SqlCommand();
  30. command.Connection = MyConnection;
  31. command.Transaction = trans;
  32. try
  33. {
  34. foreach (string commandText in sqlList)
  35. {
  36. command.CommandText = commandText;
  37. command.ExecuteNonQuery();
  38. }
  39. trans.Commit();
  40. return true;
  41. }
  42. catch (Exception ex)
  43. {
  44. trans.Rollback();
  45. throw ex;
  46. }
  47. finally
  48. {
  49. MyConnection.Close();
  50. }
  51. }

  以上。

C# 读取文件中的sql语句 创建数据库以及表结构的更多相关文章

  1. 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 ...

  2. sql语句创建数据库和表

    sql代码 -- 新建数据库 create database 数据库名称 on primary ( name='xx', filename='E:\xx.mdf', --文件地址 size=20MB, ...

  3. SQL语句创建数据库及表

    --删除数据库drop database ArchiveDev; --建立归档数据库CREATE DATABASE ArchiveDev; USE ArchiveDev;GO --1.建立归档计划执行 ...

  4. 【转载】C#常用数据库Sqlserver通过SQL语句查询数据库以及表的大小

    在Sqlserver数据库中,一般我们查看数据库的大小可以通过查找到数据库文件来查看,但如果要查找数据表Table的大小的话,则不可通过此方法,在Sqlserver数据库中,提供了相应的SQL语句来查 ...

  5. mysql / pgsql 使用sql语句查询数据库所有表注释已经表字段注释

    mysql使用sql语句查询数据库所有表注释已经表字段注释(转载)   场景: 1. 要查询数据库 "mammothcode" 下所有表名以及表注释 /* 查询数据库 ‘mammo ...

  6. 使用SQL语句清空数据库所有表的数据

    使用SQL语句清空数据库所有表的数据 近来发现数据库过大,空间不足,因此打算将数据库的数据进行全面的清理,但表非常多,一张一张的清空,实在麻烦,因此就想利用SQL语句一次清空所有数据.找到了三种方法进 ...

  7. SQL语句创建数据库,SQL语句删除数据库,SQL语句创建表,SQL语句删除表,SQL语句添加约束,SQL语句删除约束

    创建数据库: CREATE DATABASE Test --要创建的数据库名称 ON PRIMARY ( --数据库文件的具体描述 NAME='Test_data', --主数据文件的逻辑名称 FIL ...

  8. 2-06使用SQL语句创建数据库3

    向现有数据库中添加文件组和数据文件几种方式以及步骤: 第一种:在视图下添加文件组和数据文件. 添加文件组的步骤: 右击你想要添加文件组的数据库点属性,然后点文件组就可以添加. 添加数据文件的步骤: 下 ...

  9. 2-05使用SQL语句创建数据库2

    使用SQL语句创建多个数据文件和日志文件: USE master--指向当前使用的数据库 GO--批处理的标志 CREATE DATABASE E_Market--创建E_market数据库 ON P ...

随机推荐

  1. dojo chart生成函数

    写了一个函数,就是通过传递参数,生成图表,代码如下: /** * created by LZUGIS * @param container * @param type * @param data * ...

  2. 前端之jQuery02

    文档操作 重点:创建标签,jQuery里面没有这个方法 内部(子标签) 添加到指定元素内部后面 $(A).append(B): // B作为A的最后一个儿子元素:(把B追加到A) $(A).appen ...

  3. android 进制转换方法

    import android.util.Log; public class CommandHelper { public static String intToHexString(int value) ...

  4. HihoCoder 1183 : 连通性一·割边与割点(模板)

    连通性一·割边与割点 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 还记得上次小Hi和小Ho学校被黑客攻击的事情么,那一次攻击最后造成了学校网络数据的丢失.为了避免再次 ...

  5. Luogu 2530 化工厂装箱员

    Written with StackEdit. Description \(118\)号工厂是世界唯一秘密提炼锎的化工厂,由于提炼锎的难度非常高,技术不是十分完善,所以工厂生产的锎成品可能会有\(3\ ...

  6. VC++ windows开机自启动设置

    设置开机启动 很多软件要求软件能够在开机时自启动,下面讲讲如何设置开机自启动. Windows设置程序的开机启动的方法有很多,这里只讲其中的一种,该方法同时适用于32位和64位的操作系统,只需将需要开 ...

  7. 转载.Avalon-MM 阿窝龙妹妹应用笔记

    Avalon Interface Special http://www.altera.com.cn/literature/manual/mnl_avalon_spec.pdf Avalon总线是SOP ...

  8. C#获取文件的MD5码

    using System; using System.IO; using System.Security.Cryptography; using System.Text; namespace Send ...

  9. 为什么新生代内存需要有两个Survivor区?

    对于常见的GC算法,我们都应该知道,例如:标记清除算法.复制算法.标记整理算法等.标记清除算法由于回收之后存在大量的内存碎片,存在效率和空间问题!为了解决效率问题,引出了复制算法!熟悉GC算法的小伙伴 ...

  10. SQL语言分为五大类

    SQL语言分为五大类:DDL(数据定义语言) - Create.Alter.Drop 这些语句自动提交,无需用Commit提交.DQL(数据查询语言) - Select 查询语句不存在提交问题.DML ...