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. ...
随机推荐
- 使用scrollTop返回顶部
scrollTop属性表示被隐藏在内容区域上方的像素数.元素未滚动时,scrollTop的值为0,如果元素被垂直滚动了,scrollTop的值大于0,且表示元素上方不可见内容的像素宽度 由于scrol ...
- sqlserver 添加服务器链接 跨服务器访问数据库
转载地址1:https://www.cnblogs.com/wanshutao/p/4137994.html //创建服务器链接 转载地址2:https://www.cnblogs.com/xulel ...
- IOS初级:NSUserDefaults
NSUserDefaults(偏好设置),一个APP对应一个偏好设置 保存/新增数据 //存储数据 NSUserDefaults *defaults = [NSUserDefaults standar ...
- .NET获取城市信息(将三字代码转换成城市名)
整理代码,发现有一个从两张表里读取城市列表,然后linq和lambda表达式来获取城市名的函数,代码如下: public static string GetCityHotelText(string c ...
- ubuntu14上安装nltk
安装nltk 1)在buntu终端命令键入:wget https://bootstrap.pypa.io/ez_setup.py,下载ez_setup.py. 2)下载完成后后,键入:sudo py ...
- [C#.Net]KeyDown(KeyUp)和KeyPress的区别
在keyDown事件里使用keyValue:在keyPress事件里使用keyChar. keyValue转换keyChar:(char)keyValue 验证只有数字和backSpace e.han ...
- [ASP.NET]使用Layer简介
layer是一款近年来备受青睐的web弹层组件,她具备全方位的解决方案,致力于服务各水平段的开发人员,您的页面会轻松地拥有丰富友好的操作体验. 在与同类组件的比较中,layer总是能轻易获胜.她尽可能 ...
- unity3DGI
Realtime GI,实时全局光照, 1.构成 : 可实时更新的lightmap + 可实时更新的光照探头(light probe)+ 可实时更新的cubemap(Reflection probe) ...
- Codeforces Round #524 (Div. 2) E. Sonya and Matrix Beauty(字符串哈希,马拉车)
https://codeforces.com/contest/1080/problem/E 题意 有一个n*m(<=250)的字符矩阵,对于每个子矩阵的每一行可以任意交换字符的顺序,使得每一行每 ...
- git只合并某一个分支的某个commit
第一种情况:只合并一个commit git checkout develop-hbb git cherry-pick 7c32be61 以上,7c32be61是develop上的一个fix bug的c ...