码迷,mamicode.com
首页 > 数据库 > 详细

ODBC实现动态建库和切库

时间:2015-05-24 21:58:37      阅读:248      评论:0      收藏:0      [点我收藏+]

标签:odbc   动态建库   c#   动态建表   

引言


前几天在要把ITOO放在云上,那么实现动态建库和切库就很重要了。第一个我们想到的方法就是用ODBC,动态创建数据库和创建表,其实这种方式就是最简单,也是比较好想到的实现方式。所有的事情,都从简单的开始,就会比较好实现了。


实现思路:


开放数据库互连(Open Database Connectivity,ODBC),分为三步,第一步:拼接Connectionstring字符串,第二步:拼接DML或DDL语句,第三步:执行。


其实这里最重要的实现动态的效果就是用字符串拼接,或者将字符串作为参数传递,我们才能实现动态的效果。


实现代码:


创建一个CreateDb类:


<span style="font-size:18px;">using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication1
{
    public  class CreateDb
    {
        //SqlConnection myConn = new SqlConnection("Server=192.168.24.233;Integrated security=SSPI;data source=CutDb1;user id=sa;password=123456");
        SqlConnection myConn = new SqlConnection("Data Source=192.168.24.233;Initial Catalog=CutDb1;User ID=sa;Password=123456");
        //data source={0};initial catalog={1};user id={2};password={3};

        public bool CreatDatabase(string DatabaseName)
        {     

            string strDataBase;
            strDataBase = "CREATE DATABASE " + DatabaseName;


            SqlCommand myCommand = new SqlCommand(strDataBase, myConn);
            try
            {
                myConn.Open();
                myCommand.ExecuteNonQuery();

                Console.Write("DataBase is Created Successfully ", "MyProgram ");
                return true;
            }
            catch (System.Exception ex)
            {
                Console.WriteLine(ex.ToString(), "MyProgram");
                return false;
            }
            finally
            {
                if (myConn.State == ConnectionState.Open)
                {
                    myConn.Close();
                }
            }
        }

        public bool CreateTable(string DatabaseName, string TableName) {
            if (myConn.State == ConnectionState.Open)
            {
                myConn.Close();
            }


            string strTable;
            strTable = "use "+DatabaseName+" create table " + TableName + "(myId Integer CONSTRAINT PKeyMyId PRIMARY KEY," +
"myName CHAR(50), myAddress CHAR(255), myBalance FLOAT)";

            SqlCommand myCommand = new SqlCommand(strTable, myConn);
            try
            {
                myConn.Open();
                myCommand.ExecuteNonQuery();
                Console.Write("DataBase is Created Successfully ", "MyProgram ");
                return true;
            }
            catch (System.Exception ex)
            {
                Console.WriteLine(ex.ToString(), "MyProgram");
                return false;
            }
            finally
            {
                if (myConn.State == ConnectionState.Open)
                {
                    myConn.Close();
                }
            }
        }

        public static void ChangeConfiguration()
        {

            //读取程序集的配置文件
            string assemblyConfigFile = Assembly.GetEntryAssembly().Location;
            string appDomainConfigFile = AppDomain.CurrentDomain.SetupInformation.ConfigurationFile;

            Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);


            //获取appSettings节点
            AppSettingsSection appSettings = (AppSettingsSection)config.GetSection("appSettings");


            //删除name,然后添加新值
            appSettings.Settings.Remove("ConnStr");
            appSettings.Settings.Add("ConnStr", "123456");

            //保存配置文件
            config.Save();
        }


    }
}</span>


创建控制台程序调用类:


<span style="font-size:18px;">using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WebDemo.Models;

namespace ConsoleApplication1
{
    public class Program
    {
        static void Main(string[] args)
        {
            CreateDb a = new CreateDb();
            String strDataBaseName = "qmx";
            String table = "Student";
            a.CreatDatabase(strDataBaseName);
            a.CreateTable(strDataBaseName, table);
            Console.Read();

   
        }

    }
}</span>

在这里我们一定要记住一点就是我们不要用配置文件,尤其是Web.config文件,它不能再你修改过后,进行重新加载(到目前为止,能实现修改web文件,但是不能让其重新加载一次),为了避免,我们用到的拼接string和将string类型作为参数进行传递,就很好的解决了这个问题,当我们想要切库只需要加一个sqlhelper类,就可以实现了。


总结:


第一开始,我们就想要将动态切库建库放在我们的EF框架中,结果碰了钉子,所以,我们有时候需要从最简单的开始做,当我们想清楚其中的原理的时候,我们就可以继续往下做了。凡是都要从简单的入手,这个还是很好用的。



ODBC实现动态建库和切库

标签:odbc   动态建库   c#   动态建表   

原文地址:http://blog.csdn.net/qiumuxia0921/article/details/45955437

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!