C# 动态创建SQL数据库(一)
最近在做项目中要求能够要求动态添加数据库并建表。具体思路如下
1 提供数据名,根据数据库创建数据库
2 自定数据库与数据表,提供数据表自定与数据类型创建表
创建sqlhelper类,用于数据库操作
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Text; /*******************************************************************
* Copyright (C) 版权所有
* 文件名称:SqlHelper
* 命名空间:TestRecentMenu
* 创建时间:2018/12/18 14:26:01
* 作 者: wangyonglai
* 描 述:
* 修改记录:
* 修改人:
* 版 本 号:v1.0.0
**********************************************************************/
namespace TestRecentMenu
{
public static class SqlHelper
{
/// <summary>
/// 使用锁防止多线程同时操作数据库表
/// </summary>
private static readonly object sqlLock = new object(); /// <summary>
/// SQL连接
/// </summary>
private static SqlConnection connection; private static string connStr = "server=127.0.0.1; database=; user id=sa;password=Root123";
/// <summary>
/// 创建SQL连接属性
/// </summary>
public static SqlConnection Connection
{
get
{
try
{
if (connection == null)//如果没有创建连接,则先创建
{
//从配置文件中获取SQL连接字段
//string connStr = ConfigurationManager.ConnectionStrings["ConnetcionNmae"].ToString(); connection = new SqlConnection(connStr);//创建连接
connection.Open();//打开连接
}
else if (connection.State == ConnectionState.Broken)//如果连接中断,则重现打开
{
connection.Close();
connection.Open();
}
else if (connection.State == ConnectionState.Closed)//如果关闭,则打开
{
connection.Open();
}
return connection;
}
catch (Exception ex)
{
if (connection != null)
{
connection.Close();
connection.Dispose();
}
//Log4netHelper.WriteErrorLog("Connection" + ex.Message, ex);
return null;
}
}
} /// <summary>
/// 重置连接
/// </summary>
public static void ResetConnection()
{
if (connection != null)
{
connection.Close();
connection.Dispose();
connection = null;
}
} /// <summary>
/// 获取数据集
/// </summary>
/// <param name="str">执行字符串</param>
/// <returns></returns>
public static DataSet GetDataSet(string str)
{
lock (sqlLock)
{
try
{
SqlDataAdapter sda = new SqlDataAdapter(str, Connection);
DataSet ds = new DataSet();
sda.Fill(ds);
return ds;
}
catch (Exception ex)
{
ResetConnection();
//Log4netHelper.WriteErrorLog(str, ex);
return null;
}
}
} /// <summary>
/// 获取数据集
/// </summary>
/// <param name="str"></param>
/// <param name="values"></param>
/// <returns></returns>
public static DataSet GetDataSet(string str, params SqlParameter[] values)
{
lock (sqlLock)
{
try
{
SqlCommand cmd = new SqlCommand();
cmd.Connection = Connection;
cmd.CommandText = str;
cmd.Parameters.AddRange(values);
SqlDataAdapter sda = new SqlDataAdapter();
sda.SelectCommand = cmd;
DataSet dt = new DataSet();
sda.Fill(dt);
return dt;
}
catch (Exception ex)
{
ResetConnection();
//Log4netHelper.WriteErrorLog(str, ex);
return null;
}
}
} /// <summary>
/// 获取表格
/// </summary>
/// <param name="str">执行字符串</param>
/// <returns></returns>
public static DataTable GetDataTable(string str)
{
return GetDataSet(str).Tables[0];
} /// <summary>
/// 获取表格
/// </summary>
/// <param name="str">执行字符串</param>
/// <param name="values">参数值数组</param>
/// <returns></returns>
public static DataTable GetDataTable(string str, params SqlParameter[] values)
{
return GetDataSet(str, values).Tables[0];
} /// <summary>
/// 执行SQL语句
/// </summary>
/// <param name="str"></param>
public static void ExecuteNonQuery(string str)
{
try
{
SqlCommand cmd = new SqlCommand();
cmd.Connection = Connection;
cmd.CommandType = CommandType.Text;
cmd.CommandText = str;
cmd.ExecuteNonQuery();
}
catch
{ } } /// <summary>
/// 执行sql语句
/// </summary>
/// <param name="str"></param>
/// <returns></returns>
public static bool ExecuteSql(string str)
{
lock (sqlLock)
{
SqlCommand cmd = new SqlCommand();
cmd.Connection = Connection;
SqlTransaction trans = Connection.BeginTransaction();
try
{
if (cmd.Connection != null && cmd.Connection.State == ConnectionState.Open)
{
cmd.Transaction = trans;
cmd.CommandType = CommandType.Text;
cmd.CommandText = str;
cmd.ExecuteNonQuery();
trans.Commit();
return true;
}
else
{
return false;
}
}
catch (SqlException ex)
{
trans.Rollback();//事物回滚
//ResetConnection();
//Log4netHelper.WriteErrorLog(str, ex);
return false;
}
}
} /// <summary>
/// 执行sql语句
/// </summary>
/// <param name="str"></param>
/// <param name="values"></param>
/// <returns></returns>
public static bool ExecuteSql(string str, params SqlParameter[] values)
{
lock (sqlLock)
{
SqlCommand cmd = new SqlCommand();
cmd.Connection = Connection;
SqlTransaction trans = Connection.BeginTransaction();
try
{
if (cmd.Connection != null && cmd.Connection.State == ConnectionState.Open)
{
cmd.Transaction = trans;
cmd.CommandText = str;
cmd.Parameters.AddRange(values);
cmd.ExecuteNonQuery();
trans.Commit();
return true;
}
else
{
return false;
}
}
catch (SqlException ex)
{
trans.Rollback();//事物回滚
ResetConnection();
//Log4netHelper.WriteErrorLog(str, ex);
return false;
}
}
} }
}
编写调用函数
/// <summary>
/// 判断数据库是否存在
/// </summary>
/// <param name="db">数据库名称</param>
/// <returns></returns>
public Boolean IsDBExist(string db)
{
string createDbStr = " select * from master.dbo.sysdatabases where name " + "= '" + db + "'";
DataTable dt = SqlHelper.GetDataTable(createDbStr);
if (dt.Rows.Count > 0)
{
return true;
}
return false;
} /// <summary>
/// 判断数据库中指定表格是否存在
/// </summary>
/// <param name="db"></param>
/// <param name="tb"></param>
/// <returns></returns>
public Boolean IsTableExist(string db, string tb)
{
string createTbStr = "USE " + db + " select 1 from sysobjects where id =object_id('" + tb + "') and type = 'U'";
DataTable dt = SqlHelper.GetDataTable(createTbStr);
if (dt.Rows.Count > 0)
{
return true;
}
return false;
} /// <summary>
/// 创建数据库
/// </summary>
/// <param name="db"></param>
public void CreateDataBase(string db)
{
if (IsDBExist(db))
{
throw new Exception("数据库已经存在!");
}
else//不存在则创建
{
string createDbStr = "Create DATABASE " + db;
SqlHelper.ExecuteNonQuery(createDbStr); }
} /// <summary>
/// 创建数据库表
/// </summary>
/// <param name="db">数据库名</param>
/// <param name="tb">表名</param>
public void CreateDataTable(string db, string tb)
{
if (IsDBExist(db) == false)
{
throw new Exception("数据库不存在!");
}
if (IsTableExist(db, tb))
{
throw new Exception("数据库表已经存在!");
}
else
{
string content = "usseId int IDENTITY(1,1) PRIMARY KEY ,userName nvarchar(50)";
string createTableStr = "USE " + db + " Create table " + tb + "(" + content + ")"; SqlHelper.ExecuteNonQuery(createTableStr);
}
}
最后调用
private void button1_Click(object sender, EventArgs e)
{
try
{
CreateDataBase(database);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
} private void button2_Click(object sender, EventArgs e)
{
CreateDataTable(database, "usertb");
}
C# 动态创建SQL数据库(一)的更多相关文章
- C# 动态创建SQL数据库(二) 在.net core web项目中生成二维码 后台Post/Get 请求接口 方式 WebForm 页面ajax 请求后台页面 方法 实现输入框小数多 自动进位展示,编辑时实际值不变 快速掌握Gif动态图实现代码 C#处理和对接HTTP接口请求
C# 动态创建SQL数据库(二) 使用Entity Framework 创建数据库与表 前面文章有说到使用SQL语句动态创建数据库与数据表,这次直接使用Entriy Framwork 的ORM对象关 ...
- C# 动态创建SQL数据库(二)
使用Entity Framework 创建数据库与表 前面文章有说到使用SQL语句动态创建数据库与数据表,这次直接使用Entriy Framwork 的ORM对象关系映射来创建数据库与表 一 新建项 ...
- 如何用C# 动态创建Access数据库和表?
记得以前要动态的创建Access数据库的mdb文件都是采用DAO,用VC开发,一大堆的API,很是麻烦.而且以前工作中需要全新的access数据库,可以复制数据库,也可以把新的数据库放到资源里面,用新 ...
- 动态创建MySQL数据库
import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sq ...
- 个人博客设计:创建Sql数据库操作类。
整体的博客框架如下 数据库操作java类如下 package com.yxq.dao; import java.sql.Connection; import java.sql.DriverManage ...
- 在Delphi中如何动态创建dbf数据库(二)?
unit Form_ToChangCSVforDBFU; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics ...
- 在Delphi中如何动态创建dbf数据库(一)?
table2.Close; table2.Active:=false; table2.Exclusive:=true; table2.TableName:='h:\gzkd\sds'; table2. ...
- 创建SQL数据库指定文件路径
create database b2c on primary -- 默认就属于primary文件组,可省略(/*--数据文件的具体描述--*/ name='b2c', -- 主数据文件的逻 ...
- c#创建access数据库和数据表
由于在程序中使用了ADOX,所以先要在解决方案中引用之,方法如下: 解决方案资源管理器(项目名称)-->(右键)添加引用-->COM--> Microsoft ADO Ext. ...
随机推荐
- How-to Install VMware Tools on Debian Stretch 9 32/64bit Linux+GNU
在虚拟机VMWARE上安装debian9 安装vmwaretools时候遇到问题 询问我IFCONFIG安装在哪里? 新版的debian不知道是用户权限问题还是使用了其他网络配置工具 vmwareto ...
- Max Chunks To Make Sorted LT769
Given an array arr that is a permutation of [0, 1, ..., arr.length - 1], we split the array into som ...
- Java虚拟机的相关笔记
1.垃圾GC回收事件Minor GC(只清除新生代),Full GC(清除新生代和老年代),Major GC(清除新生.老年代和持久代). 2.堆分为新生代.老年代和持久代,持久代一般存放静态文件. ...
- php服务器---IIS一些问题
配置网上很多博客都介绍过..这里不作详细说明了..将PHP目录(D:\PHP\PHP)下的php.ini-recommended或者php.ini-dist改名为php.ini,并找到extensio ...
- javascript对象的属性,方法,prototype作用范围分析.
用了javascript这么久由于没有系统学习过基础,总是拿来主义. 所以对一些基础知识还是搞不清楚很混乱. 今天自己做个小例子,希望彻底能搞清楚. 注释中对象只例子的对象本身,原型只原型继承对象的新 ...
- 求先序排列(NOIP2001&NOIP水题测试(2017082301))
题目链接:求先序排列 这道题讲白了,就是数的构造,然后遍历. 思路大致是这样: 我们先通过后序遍历,找到当前区间的根,然后在中序遍历中找到根对应的下标,然后就可以分出左右子树,建立当前根与左右子树根的 ...
- php socket通过smtp发送邮件(纯文本、HTML,多收件人,多抄送,多密送)
<?php /** * 邮件发送类 * 支持发送纯文本邮件和HTML格式的邮件,可以多收件人,多抄送,多秘密抄送 * @example * $mail = new MySendMail(); * ...
- 2018.11.03 NOIP模拟 图(bfs/最短路)
传送门 显然如果AAA到BBB或者CCC到DDD走的不是最短路一定是有一段路径重合了,于是可以O(n2)bfsO(n^2)bfsO(n2)bfs出两点之间的最短距离然后枚举两个点作为重合的端点来更新答 ...
- Codeforces Round #524 (Div. 2) E. Sonya and Matrix Beauty(字符串哈希,马拉车)
https://codeforces.com/contest/1080/problem/E 题意 有一个n*m(<=250)的字符矩阵,对于每个子矩阵的每一行可以任意交换字符的顺序,使得每一行每 ...
- flask 知识积累
PythonWEB框架之Flask Flask快速入门,知识整理 Flask 框架