C# 自定義資料庫操作類 DataBase
阿新 • • 發佈:2018-12-26
呼叫示例:
using System; using System.Collections.Generic; using System.Data.SqlClient; using System.Linq; using System.Text; using System.Web; using System.Web.UI.WebControls; namespace WebApplicationTest { /// <summary> /// 定義資料庫操作類,用於查詢和操作本地資料資訊 /// 示例:DataBase newDataBase3 = new DataBase("newDataBase3", "sa", "12345"); /// </summary> public class DataBase { private string DBName = ""; // 資料庫名稱 private string UserName = ""; // 資料庫使用者名稱 private string Password = ""; // 資料庫密碼 public bool isInitSuccess = false; // 記錄指定的資料庫是否可以連線成功 public string connectionString = ""; // 當前資料庫連線串 public string connectionString_master = "";// 連線到master資料庫的連線串 /// <summary> /// 建立指定資料庫操作物件 /// </summary> /// <param name="DBName">資料庫名稱</param> /// <param name="UserName">資料庫使用者名稱</param> /// <param name="Password">資料庫密碼</param> public DataBase(string DBName, string UserName, string Password) { if (DBName == null || DBName.Equals("") || UserName == null || UserName.Equals("") || Password == null || Password.Equals("")) { throw new Exception("DataBase()引數不可為空"); } this.DBName = DBName; this.UserName = UserName; this.Password = Password; connectionString = DataBaseTool.getConnectString(DBName, UserName, Password); connectionString_master = DataBaseTool.getConnectString("", UserName, Password); //if (this.DBName != null && !this.DBName.Equals("") && !this.DBName.Equals("master")) { if (!DataBaseTool.Exist(DBName, connectionString_master)) // 判斷資料庫是否存在,若不存在則建立資料庫 { isInitSuccess = DataBaseTool.Create(DBName, connectionString_master); } else isInitSuccess = true; } } public String Execute(string sql) { return DataBaseTool.Execute(sql, connectionString); } public Dictionary<String, List<String>> ExecuteDic(string sql) { return DataBaseTool.ExecuteDic(sql, connectionString); } public List<String> ExecuteList(string sql) { return DataBaseTool.ExecuteList(sql, connectionString); } /// <summary> /// 連線資料庫,執行sql語句,返回Table表 /// queryString = "SELECT * FROM 資料表1"; /// </summary> public Table ExecuteTable(string sql) { return DataBaseTool.ExecuteTable(sql, connectionString); } /// <summary> /// 所有資料庫名稱 /// </summary> public List<String> DataBaseNames() { return DataBaseTool.DataBaseNames(connectionString_master); } /// <summary> /// 當前資料中,所有表名稱 /// </summary> public List<String> TableNames() { string sql = "select name from sysobjects where xtype='U'"; List<string> list = ExecuteList(sql); return list; } /// <summary> /// 刪除指定的資料庫 /// </summary> public bool DeletDataBase(string DataBaseName) { if (DataBaseName == null || DataBaseName.Equals("")) DataBaseName = DBName; return DataBaseTool.Delet(DataBaseName, connectionString_master); } #region 資料庫表操作 /// <summary> /// 判斷當前資料庫中,是否存在指定名稱的表 /// </summary> /// <param name="TAB">表名稱</param> public bool ExistTab(string TAB) { return DataBaseTool.ExistTab(TAB, connectionString); } /// <summary> /// 在當前資料庫中建立資料表 /// </summary> /// <param name="TAB">表名稱</param> /// <param name="Colums">所有列名稱</param> public bool CreateTable(String TAB, List<string> Colums) { if (Colums.Count==0) Colums = new String[] { "KEY", "VALUE" }.ToList(); // 未指定列名稱時,預設新增KEY、VALUE兩列 Dictionary<string, int> ColumnInfo = new Dictionary<string, int>(); foreach (string col in Colums) { ColumnInfo.Add(col, 100); } //ColumnInfo.Add("EXT", 300); // 預設新增一個拓展欄位列 return DataBaseTool.CreateTable(TAB, ColumnInfo, connectionString); } /// <summary> /// 在當前資料庫中建立資料表 /// </summary> /// <param name="TAB">表名稱</param> /// <param name="ColumnInfo">所有列資訊</param> /// <returns></returns> public bool CreateTable(String TAB, Dictionary<string, int> ColumnInfo) { return DataBaseTool.CreateTable(TAB, ColumnInfo, connectionString); } /// <summary> /// 刪除當前資料庫中的TAB表 /// </summary> public bool DeletTable(String TAB) { return DataBaseTool.DeletTable(TAB, connectionString); } /// <summary> /// 向表中插入新的資料 /// </summary> /// <param name="TAB">表名稱</param> /// <param name="values">列資料</param> /// <returns>新生成的資料行ID</returns> public string InsetValue(string TAB, List<string> values) { return DataBaseTool.InsetValue(TAB, values, connectionString); } /// <summary> /// 刪除TAB表中,KeyName為KeyValue的所有行 /// </summary> /// <param name="TAB">表名稱</param> /// <param name="KeyValue">鍵值</param> /// <param name="KeyName">鍵名稱</param> /// <returns></returns> public bool DeletValue(string TAB, string KeyValue, string KeyName = "ID") { return DataBaseTool.DeletValue(TAB, KeyValue, connectionString, KeyName); } /// <summary> /// 修改TAB表所有標籤為KEY的所有資料 /// </summary> /// <param name="TAB">表名稱</param> /// <param name="KeyValue">主鍵值</param> /// <param name="datas">待修改的資料資訊</param> /// <param name="connectionString"></param> /// <param name="KeyName">主鍵名稱</param> /// <returns></returns> public string UpdateValue(string TAB, string KeyValue, Dictionary<string, string> datas, string KeyName = "ID") { return DataBaseTool.UpdateValue(TAB, KeyValue, datas, connectionString, KeyName); } /// <summary> /// 查詢TAB表,KeyName為KeyValue的所有資料項 /// </summary> /// <param name="TAB"></param> /// <param name="KeyValue"></param> /// <param name="KeyName"></param> /// <param name="columns">查詢的列名稱</param> /// <returns></returns> public string SelectValue(string TAB, string KeyValue, string KeyName = "ID", List<string> columns = null) { return DataBaseTool.SelectValue(TAB, KeyValue, connectionString, KeyName, columns); } /// <summary> /// 查詢TAB表,KeyName為KeyValue的所有資料項 /// </summary> /// <param name="TAB"></param> /// <param name="KeyValue"></param> /// <param name="connectionString"></param> /// <param name="KeyName"></param> /// <param name="columns">查詢的列名稱</param> /// <returns></returns> public List<string> SelectValueList(string TAB, string KeyValue, string KeyName = "ID", List<string> columns = null) { return DataBaseTool.SelectValueList(TAB, KeyValue, connectionString, KeyName, columns); } #endregion } /// <summary> /// 資料庫靜態操作函式 /// </summary> public class DataBaseTool { /// <summary> /// 獲取資料庫的連線字串 /// </summary> /// <param name="DBName">資料庫名稱</param> /// <param name="UserName">使用者名稱稱</param> /// <param name="Password">密碼</param> public static string getConnectString(string DBName, string UserName, string Password) { if (DBName == null || DBName.Equals("")) DBName = "master"; if (UserName == null || UserName.Equals("")) return "UserName不可為空"; if (Password == null || Password.Equals("")) return "Password不可為空"; string connectionString = @"Data Source=.\JSQL2008;Initial Catalog=" + DBName + ";User ID=" + UserName + ";Password=" + Password + ""; // 連線本地資料庫DBName // connectionString = @"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\NoteBook.mdf;Integrated Security=True;User Instance=True"; // 連線附加資料庫 // connectionString = @"Data Source=.\JSQL2008;Initial Catalog=DataBase1;User ID=sa;Password=12345"; // 連線本地資料庫DataBase1 return connectionString; } // 1、---------- /// <summary> /// 連線資料庫,執行sql語句 /// queryString = "SELECT * FROM 資料表1"; /// </summary> public static String Execute(string queryString, string connectionString) { try { //string queryString = "SELECT * FROM 資料表1"; using (SqlConnection connection = new SqlConnection(connectionString)) { connection.Open(); SqlCommand command = new SqlCommand(queryString, connection); SqlDataReader reader = command.ExecuteReader(); String jsonData = ToJson(reader); // 轉化為Json資料 if (jsonData.Trim().Equals("")) jsonData = "success"; connection.Close(); return jsonData; } } catch (Exception ex) { return "fail"; } } /// <summary> /// DataReader轉換為Json串 /// </summary> public static string ToJson(SqlDataReader dataReader) { StringBuilder Builder = new StringBuilder(); int rows = 0; while (dataReader.Read()) { if (rows++ > 0) Builder.Append(","); // 行資料轉Json Builder.Append("{"); for (int i = 0; i < dataReader.FieldCount; i++) { if (i > 0) Builder.Append(","); // 列名稱 string strKey = dataReader.GetName(i); strKey = "\"" + strKey + "\""; // 列資料 Type type = dataReader.GetFieldType(i); string strValue = dataReader[i].ToString(); strValue = String.Format(strValue, type).Trim(); if (type == typeof(string) || type == typeof(DateTime)) strValue = "\"" + strValue + "\""; Builder.Append(strKey + ":" + strValue); } Builder.Append("}"); } dataReader.Close(); if (rows > 1) return "[" + Builder.ToString() + "]"; else return Builder.ToString(); } // 2、---------- /// <summary> /// 連線資料庫,執行sql語句 /// queryString = "SELECT * FROM 資料表1"; /// </summary> public static Dictionary<String, List<String>> ExecuteDic(string queryString, string connectionString) { try { //string queryString = "SELECT * FROM 資料表1"; using (SqlConnection connection = new SqlConnection(connectionString)) { connection.Open(); SqlCommand command = new SqlCommand(queryString, connection); SqlDataReader reader = command.ExecuteReader(); Dictionary<String, List<String>> dic = ToDictionary(reader); // 轉化為列list資料 connection.Close(); return dic; } } catch (Exception ex) { return new Dictionary<string, List<string>>(); } } /// <summary> /// DataReader轉換為列list資料 /// </summary> public static Dictionary<String, List<String>> ToDictionary(SqlDataReader dataReader) { Dictionary<String, List<String>> Dic = new Dictionary<string, List<string>>(); while (dataReader.Read()) { // 行資料轉Json for (int i = 0; i < dataReader.FieldCount; i++) { // 列名稱 string strKey = dataReader.GetName(i); List<String> list = null; if (!Dic.ContainsKey(strKey)) { list = new List<string>(); // 生成新的list Dic.Add(strKey, list); } else list = Dic[strKey]; // 獲取列名對應的list // 列資料 Type type = dataReader.GetFieldType(i); string strValue = dataReader[i].ToString(); strValue = String.Format(strValue, type).Trim(); list.Add(strValue); } } dataReader.Close(); return Dic; } // 3、---------- /// <summary> /// 連線資料庫,執行sql語句 /// queryString = "SELECT * FROM 資料表1"; /// </summary> public static List<String> ExecuteList(string queryString, string connectionString) { Dictionary<String, List<String>> dic = ExecuteDic(queryString, connectionString); List<String> list = getList(dic, 0); return list; } /// <summary> /// 獲取dic的指定列 /// </summary> /// <param name="dic"></param> /// <param name="index"></param> /// <returns></returns> public static List<String> getList(Dictionary<String, List<String>> dic, int index) { List<String> list = new List<string>(); if (dic != null && dic.Count > 0 && 0 <= index && index < dic.Count) { List<string> keys = dic.Keys.ToList<string>(); String key = keys[index]; list = dic[key]; } return list; } // 4、---------- /// <summary> /// 連線資料庫,執行sql語句,返回Table表 /// queryString = "SELECT * FROM 資料表1"; /// </summary> public static Table ExecuteTable(string queryString, string connectionString) { try { //string queryString = "SELECT * FROM 資料表1"; using (SqlConnection connection = new SqlConnection(connectionString)) { connection.Open(); SqlCommand command = new SqlCommand(queryString, connection); SqlDataReader reader = command.ExecuteReader(); Table table = ToTable(reader); // 轉化為列list資料 connection.Close(); return table; } } catch (Exception ex) { return new Table(); } } /// <summary> /// DataReader轉換為Table表 /// </summary> public static Table ToTable(SqlDataReader dataReader) { Table table = new Table(); table.Attributes.Add("border", "1"); // 新增邊框線 table.Attributes.Add("BorderStyle", "Solid"); table.Attributes.Add("width", "100%"); // 表格寬度 table.Attributes.Add("cellspacing", "0"); table.Attributes.Add("bordercolor", "DarkGray"); TableHeaderRow header = new TableHeaderRow(); bool firstrow = true; while (dataReader.Read()) { TableRow row = new TableRow(); // 行資料轉Json for (int i = 0; i < dataReader.FieldCount; i++) { // Tab表頭 if (firstrow) { string strKey = dataReader.GetName(i); // 列名稱 TableHeaderCell headCell = new TableHeaderCell(); headCell.Text = strKey; header.Cells.Add(headCell); } // Tab行資料 Type type = dataReader.GetFieldType(i); string strValue = dataReader[i].ToString(); strValue = String.Format(strValue, type).Trim(); TableCell cell = new TableCell(); cell.Text = strValue; row.Cells.Add(cell); } if (firstrow) { table.Rows.Add(header); firstrow = false; } table.Rows.Add(row); } dataReader.Close(); return table; } //---------- /// <summary> /// 判斷指定的資料庫是否存在 /// </summary> /// <param name="DataBaseName">資料庫名稱</param> public static bool Exist(string DataBaseName, string connectString) { string sql = "select count(*) From master.dbo.sysdatabases where name='" + DataBaseName + "'"; String result = Execute(sql, connectString); return (!result.Equals("{\"\":0}") && !result.Equals("fail")); } /// <summary> /// 建立指定名稱的資料庫 /// </summary> /// <param name="DataBaseName">資料庫名稱</param> public static bool Create(string DataBaseName, string connectionString) { string sql = "CREATE DATABASE \"" + DataBaseName + "\""; String result = Execute(sql, connectionString); return result.Equals("success"); } /// <summary> /// 獲取取所有資料庫名稱 /// </summary> public static List<string> DataBaseNames(string connectionString) { string sql = "select name From master.dbo.sysdatabases"; List<string> list = ExecuteList(sql, connectionString); return list; } /// <summary> /// 刪除指定的資料庫 /// </summary> public static bool Delet(string DataBaseName, string connectionString) { string sql = "DROP DATABASE \"" + DataBaseName + "\""; String result = Execute(sql, connectionString); return result.Equals("success"); } #region 資料庫表操作 /// <summary> /// 判斷資料庫中是否存在指定名稱的表 /// </summary> /// <param name="TAB">表名稱</param> /// <param name="connectionString">資料庫連線串</param> /// <returns></returns> public static Boolean ExistTab(string TAB, string connectionString) { // 查詢表是否存在: select name from sys.tables where name='資料表1' String sql = "select name from sys.tables where name='" + TAB + "'"; List<string> resultList = ExecuteList(sql, connectionString); String data = resultList.Count == 0 ? "" : resultList[0]; return (data.Equals(TAB)); } /// <summary> /// 建立指定名稱的表 /// </summary> /// <param name="TAB">資料表名稱</param> /// <param name="ColumnInfo">列名稱,列長度資訊</param> /// <param name="connectionString"></param> /// <returns></returns> public static bool CreateTable(String TAB, Dictionary<string, int> ColumnInfo, string connectionString) { //if (ExistTab(TAB, connectionString)) return true; // 若已存在資料表,則無需再建立 //CREATE TABLE [dbo].[Log_All] //( // [ID] INT NOT NULL PRIMARY KEY IDENTITY(100,1), // [日期] NCHAR(30) NULL, // [資訊] NCHAR(300) NULL //) // 生成資料表sql命令 StringBuilder builder = new StringBuilder(); builder.AppendLine("CREATE TABLE [dbo].[" + TAB + "] "); builder.AppendLine("( "); builder.AppendLine(" [ID] INT NOT NULL PRIMARY KEY IDENTITY(100,1), "); // 新增主鍵ID為自增,從100開始 foreach (string key in ColumnInfo.Keys) { string Name = key.Trim(); int Len = ColumnInfo[key]; builder.AppendLine(" [" + Name + "] NCHAR(" + Len + ") NULL, "); } builder.AppendLine(") "); // 執行 String sql = builder.ToString(); String data = Execute(sql, connectionString); return (data.Trim().ToLower().Equals("success")); } /// <summary> /// 刪除當前資料庫中的TAB表 /// </summary> public static bool DeletTable(String TAB, string connectionString) { string sql = "DROP TABLE \"" + TAB + "\""; String result = Execute(sql, connectionString); return result.Equals("success"); } /// <summary> /// 向表中插入新的資料 /// </summary> /// <param name="TAB">表名稱</param> /// <param name="values">列資料</param> /// <returns>新生成的資料行ID</returns> public static string InsetValue(string TAB, List<string> values, string connectionString) { //if (!ExistTab(TAB, connectionString)) return "fail"; // 若無資料表,則插入資料失敗 //insert into Log_All(日期, 資訊) Values('日期1', '資訊1') //insert into Log_All(日期, 資訊) output inserted.id Values('日期4', '資訊4') //insert into Log_All output inserted.id Values('日期x', '資訊x') StringBuilder builder = new StringBuilder(); builder.AppendLine("insert into " + TAB + " output inserted.id Values"); builder.AppendLine("( "); bool isfirst = true; foreach (string value in values) { builder.Append((isfirst ? "\r\n" : ", \r\n") + "'" + value + "'"); isfirst = false; } builder.AppendLine(") "); String sql = builder.ToString(); String data = ExecuteList(sql, connectionString)[0]; return data; } /// <summary> /// 刪除TAB表中,KeyName主鍵值為KeyValue的所有資料項 /// </summary> /// <param name="TAB">表名稱</param> /// <param name="Key">主鍵值</param> /// <returns></returns> public static bool DeletValue(string TAB, string KeyValue, string connectionString, string KeyName = "ID") { String sql = "delete from " + TAB + " where " + KeyName + "='" + KeyValue + "'"; ; String result = Execute(sql, connectionString); return result.Equals("success"); } /// <summary> /// 修改TAB表所有標籤為KEY的所有資料 /// </summary> /// <param name="TAB">表名稱</param> /// <param name="KeyValue">主鍵值</param> /// <param name="datas">待修改的資料資訊</param> /// <param name="connectionString"></param> /// <param name="KeyName">主鍵名稱</param> /// <returns></returns> public static string UpdateValue(string TAB, string KeyValue, Dictionary<string, string> datas, string connectionString, string KeyName="ID" ) { // UPDATE Person SET Address = 'Zhongshan 23', City = 'Nanjing' WHERE LastName = 'Wilson' StringBuilder builder = new StringBuilder(); bool isFirst = true; foreach (string key in datas.Keys) { builder.Append((isFirst ? " " : ", ") + key + " = " + "'" + datas[key] + "'"); isFirst = false; } String sql = "update " + TAB + " set " + builder.ToString() + " where " + KeyName + "='" + KeyValue + "'"; String data = Execute(sql, connectionString); return data; } /// <summary> /// 查詢TAB表,KeyName為KeyValue的所有資料項 /// </summary> /// <param name="TAB"></param> /// <param name="KeyValue"></param> /// <param name="connectionString"></param> /// <param name="KeyName"></param> /// <param name="columns">查詢的列名稱</param> /// <returns></returns> public static string SelectValue(string TAB, string KeyValue, string connectionString, string KeyName = "ID", List<string> columns = null) { string selectColumn = getCondition(columns); String sql = "select " + selectColumn + " from [" + TAB + "]" + (KeyName.Equals("") ? "" : " where " + KeyName + "='" + KeyValue + "'"); String data = Execute(sql, connectionString); return data; } /// <summary> /// 查詢TAB表,KeyName為KeyValue的所有資料項 /// </summary> /// <param name="TAB"></param> /// <param name="KeyValue"></param> /// <param name="connectionString"></param> /// <param name="KeyName"></param> /// <param name="columns">查詢的列名稱</param> /// <returns></returns> public static List<string> SelectValueList(string TAB, string KeyValue, string connectionString, string KeyName = "ID", List<string> columns=null) { string selectColumn = getCondition(columns); String sql = "select " + selectColumn + " from [" + TAB + "]" + (KeyName.Equals("") ? "" : " where " + KeyName + "='" + KeyValue + "'"); List<String> list = ExecuteList(sql, connectionString); return list; } /// <summary> /// 組合paramList中的引數資訊 /// </summary> /// <param name="paramList"></param> /// <returns></returns> private static string getCondition(List<string> paramList = null) { string Condition = "*"; if (paramList != null && paramList.Count > 0) { StringBuilder builder = new StringBuilder(); bool isFirst = true; foreach (string key0 in paramList) { string key = key0.Trim(); if (!key.Equals("")) { builder.Append((isFirst ? " " : ", ") + key); isFirst = false; } } Condition = builder.ToString(); if (Condition.Trim().Equals("")) Condition = "*"; } return Condition; } #endregion } }
DataBase.cs (使用於SQL資料庫)
using System; using System.Collections.Generic; using System.Data.SqlClient; using System.Linq; using System.Text; using System.Web; namespace WebApplicationTest { /// <summary> /// 定義資料庫操作類,用於查詢和操作本地資料資訊 /// 示例:DataBase newDataBase3 = new DataBase("newDataBase3", "sa", "12345"); /// </summary> public class DataBase { private string DBName = ""; // 資料庫名稱 private string UserName = ""; // 資料庫使用者名稱 private string Password = ""; // 資料庫密碼 public bool isInitSuccess = false; // 記錄指定的資料庫是否可以連線成功 public string connectionString = ""; // 當前資料庫連線串 public string connectionString_master = "";// 連線到master資料庫的連線串 /// <summary> /// 建立指定資料庫操作物件 /// </summary> /// <param name="DBName">資料庫名稱</param> /// <param name="UserName">資料庫使用者名稱</param> /// <param name="Password">資料庫密碼</param> public DataBase(string DBName, string UserName, string Password) { if (DBName == null || DBName.Equals("") || UserName == null || UserName.Equals("") || Password == null || Password.Equals("")) { throw new Exception("DataBase()引數不可為空"); } this.DBName = DBName; this.UserName = UserName; this.Password = Password; connectionString = DataBaseTool.getConnectString(DBName, UserName, Password); connectionString_master = DataBaseTool.getConnectString("", UserName, Password); //if (this.DBName != null && !this.DBName.Equals("") && !this.DBName.Equals("master")) { if (!DataBaseTool.Exist(DBName, connectionString_master)) // 判斷資料庫是否存在,若不存在則建立資料庫 { isInitSuccess = DataBaseTool.Create(DBName, connectionString_master); } else isInitSuccess = true; } } public String Execute(string sql) { return DataBaseTool.Execute(sql, connectionString); } public Dictionary<String, List<String>> ExecuteDic(string sql) { return DataBaseTool.ExecuteDic(sql, connectionString); } public List<String> ExecuteList(string sql) { return DataBaseTool.ExecuteList(sql, connectionString); } /// <summary> /// 所有資料庫名稱 /// </summary> public List<String> DataBaseNames() { return DataBaseTool.DataBaseNames(connectionString_master); } /// <summary> /// 當前資料中,所有表名稱 /// </summary> public List<String> TableNames() { string sql = "select name from sysobjects where xtype='U'"; List<string> list = ExecuteList(sql); return list; } /// <summary> /// 刪除指定的資料庫 /// </summary> public bool DeletDataBase(string DataBaseName) { if (DataBaseName == null || DataBaseName.Equals("")) DataBaseName = DBName; return DataBaseTool.Delet(DataBaseName, connectionString_master); } #region 資料庫表操作 /// <summary> /// 判斷當前資料庫中,是否存在指定名稱的表 /// </summary> /// <param name="TAB">表名稱</param> public bool ExistTab(string TAB) { return DataBaseTool.ExistTab(TAB, connectionString); } /// <summary> /// 在當前資料庫中建立資料表 /// </summary> /// <param name="TAB">表名稱</param> /// <param name="Colums">所有列名稱</param> public bool CreateTable(String TAB, List<string> Colums) { if (Colums.Count==0) Colums = new String[] { "KEY", "VALUE" }.ToList(); // 未指定列名稱時,預設新增KEY、VALUE兩列 Dictionary<string, int> ColumnInfo = new Dictionary<string, int>(); foreach (string col in Colums) { ColumnInfo.Add(col, 100); } //ColumnInfo.Add("EXT", 300); // 預設新增一個拓展欄位列 return DataBaseTool.CreateTable(TAB, ColumnInfo, connectionString); } /// <summary> /// 在當前資料庫中建立資料表 /// </summary> /// <param name="TAB">表名稱</param> /// <param name="ColumnInfo">所有列資訊</param> /// <returns></returns> public bool CreateTable(String TAB, Dictionary<string, int> ColumnInfo) { return DataBaseTool.CreateTable(TAB, ColumnInfo, connectionString); } /// <summary> /// 刪除當前資料庫中的TAB表 /// </summary> public bool DeletTable(String TAB) { return DataBaseTool.DeletTable(TAB, connectionString); } /// <summary> /// 向表中插入新的資料 /// </summary> /// <param name="TAB">表名稱</param> /// <param name="values">列資料</param> /// <returns>新生成的資料行ID</returns> public string InsetValue(string TAB, List<string> values) { return DataBaseTool.InsetValue(TAB, values, connectionString); } /// <summary> /// 刪除TAB表中,KeyName為KeyValue的所有行 /// </summary> /// <param name="TAB">表名稱</param> /// <param name="KeyValue">鍵值</param> /// <param name="KeyName">鍵名稱</param> /// <returns></returns> public bool DeletValue(string TAB, string KeyValue, string KeyName = "ID") { return DataBaseTool.DeletValue(TAB, KeyValue, connectionString, KeyName); } /// <summary> /// 修改TAB表所有標籤為KEY的所有資料 /// </summary> /// <param name="TAB">表名稱</param> /// <param name="KeyValue">主鍵值</param> /// <param name="datas">待修改的資料資訊</param> /// <param name="connectionString"></param> /// <param name="KeyName">主鍵名稱</param> /// <returns></returns> public string UpdateValue(string TAB, string KeyValue, Dictionary<string, string> datas, string KeyName = "ID") { return DataBaseTool.UpdateValue(TAB, KeyValue, datas, connectionString, KeyName); } /// <summary> /// 查詢TAB表,KeyName為KeyValue的所有資料項 /// </summary> /// <param name="TAB"></param> /// <param name="KeyValue"></param> /// <param name="KeyName"></param> /// <param name="columns">查詢的列名稱</param> /// <returns></returns> public string SelectValue(string TAB, string KeyValue, string KeyName = "ID", List<string> columns = null) { return DataBaseTool.SelectValue(TAB, KeyValue, connectionString, KeyName, columns); } /// <summary> /// 查詢TAB表,KeyName為KeyValue的所有資料項 /// </summary> /// <param name="TAB"></param> /// <param name="KeyValue"></param> /// <param name="connectionString"></param> /// <param name="KeyName"></param> /// <param name="columns">查詢的列名稱</param> /// <returns></returns> public List<string> SelectValueList(string TAB, string KeyValue, string KeyName = "ID", List<string> columns = null) { return DataBaseTool.SelectValueList(TAB, KeyValue, connectionString, KeyName, columns); } #endregion } /// <summary> /// 資料庫靜態操作函式 /// </summary> public class DataBaseTool { /// <summary> /// 獲取資料庫的連線字串 /// </summary> /// <param name="DBName">資料庫名稱</param> /// <param name="UserName">使用者名稱稱</param> /// <param name="Password">密碼</param> public static string getConnectString(string DBName, string UserName, string Password) { if (DBName == null || DBName.Equals("")) DBName = "master"; if (UserName == null || UserName.Equals("")) return "UserName不可為空"; if (Password == null || Password.Equals("")) return "Password不可為空"; string connectionString = @"Data Source=.\JSQL2008;Initial Catalog=" + DBName + ";User ID=" + UserName + ";Password=" + Password + ""; // 連線本地資料庫DBName // connectionString = @"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\NoteBook.mdf;Integrated Security=True;User Instance=True"; // 連線附加資料庫 // connectionString = @"Data Source=.\JSQL2008;Initial Catalog=DataBase1;User ID=sa;Password=12345"; // 連線本地資料庫DataBase1 return connectionString; } // 1、---------- /// <summary> /// 連線資料庫,執行sql語句 /// queryString = "SELECT * FROM 資料表1"; /// </summary> public static String Execute(string queryString, string connectionString) { try { //string queryString = "SELECT * FROM 資料表1"; using (SqlConnection connection = new SqlConnection(connectionString)) { connection.Open(); SqlCommand command = new SqlCommand(queryString, connection); SqlDataReader reader = command.ExecuteReader(); String jsonData = ToJson(reader); // 轉化為Json資料 if (jsonData.Trim().Equals("")) jsonData = "success"; connection.Close(); return jsonData; } } catch (Exception ex) { return "fail"; } } /// <summary> /// DataReader轉換為Json串 /// </summary> public static string ToJson(SqlDataReader dataReader) { StringBuilder Builder = new StringBuilder(); int rows = 0; while (dataReader.Read()) { if (rows++ > 0) Builder.Append(","); // 行資料轉Json Builder.Append("{"); for (int i = 0; i < dataReader.FieldCount; i++) { if (i > 0) Builder.Append(","); // 列名稱 string strKey = dataReader.GetName(i); strKey = "\"" + strKey + "\""; // 列資料 Type type = dataReader.GetFieldType(i); string strValue = dataReader[i].ToString(); strValue = String.Format(strValue, type).Trim(); if (type == typeof(string) || type == typeof(DateTime)) strValue = "\"" + strValue + "\""; Builder.Append(strKey + ":" + strValue); } Builder.Append("}"); } dataReader.Close(); if (rows > 1) return "[" + Builder.ToString() + "]"; else return Builder.ToString(); } // 2、---------- /// <summary> /// 連線資料庫,執行sql語句 /// queryString = "SELECT * FROM 資料表1"; /// </summary> public static Dictionary<String, List<String>> ExecuteDic(string queryString, string connectionString) { try { //string queryString = "SELECT * FROM 資料表1"; using (SqlConnection connection = new SqlConnection(connectionString)) { connection.Open(); SqlCommand command = new SqlCommand(queryString, connection); SqlDataReader reader = command.ExecuteReader(); Dictionary<String, List<String>> dic = ToDictionary(reader); // 轉化為列list資料 connection.Close(); return dic; } } catch (Exception ex) { return new Dictionary<string, List<string>>(); } } /// <summary> /// DataReader轉換為列list資料 /// </summary> public static Dictionary<String, List<String>> ToDictionary(SqlDataReader dataReader) { Dictionary<String, List<String>> Dic = new Dictionary<string, List<string>>(); while (dataReader.Read()) { // 行資料轉Json for (int i = 0; i < dataReader.FieldCount; i++) { // 列名稱 string strKey = dataReader.GetName(i); List<String> list = null; if (!Dic.ContainsKey(strKey)) { list = new List<string>(); // 生成新的list Dic.Add(strKey, list); } else list = Dic[strKey]; // 獲取列名對應的list // 列資料 Type type = dataReader.GetFieldType(i); string strValue = dataReader[i].ToString(); strValue = String.Format(strValue, type).Trim(); list.Add(strValue); } } dataReader.Close(); return Dic; } // 3、---------- /// <summary> /// 連線資料庫,執行sql語句 /// queryString = "SELECT * FROM 資料表1"; /// </summary> public static List<String> ExecuteList(string queryString, string connectionString) { Dictionary<String, List<String>> dic = ExecuteDic(queryString, connectionString); List<String> list = getList(dic, 0); return list; } /// <summary> /// 獲取dic的指定列 /// </summary> /// <param name="dic"></param> /// <param name="index"></param> /// <returns></returns> public static List<String> getList(Dictionary<String, List<String>> dic, int index) { List<String> list = new List<string>(); if (dic != null && dic.Count > 0 && 0 <= index && index < dic.Count) { List<string> keys = dic.Keys.ToList<string>(); String key = keys[index]; list = dic[key]; } return list; } //---------- /// <summary> /// 判斷指定的資料庫是否存在 /// </summary> /// <param name="DataBaseName">資料庫名稱</param> public static bool Exist(string DataBaseName, string connectString) { string sql = "select count(*) From master.dbo.sysdatabases where name='" + DataBaseName + "'"; String result = Execute(sql, connectString); return (!result.Equals("{\"\":0}") && !result.Equals("fail")); } /// <summary> /// 建立指定名稱的資料庫 /// </summary> /// <param name="DataBaseName">資料庫名稱</param> public static bool Create(string DataBaseName, string connectionString) { string sql = "CREATE DATABASE \"" + DataBaseName + "\""; String result = Execute(sql, connectionString); return result.Equals("success"); } /// <summary> /// 獲取取所有資料庫名稱 /// </summary> public static List<string> DataBaseNames(string connectionString) { string sql = "select name From master.dbo.sysdatabases"; List<string> list = ExecuteList(sql, connectionString); return list; } /// <summary> /// 刪除指定的資料庫 /// </summary> public static bool Delet(string DataBaseName, string connectionString) { string sql = "DROP DATABASE \"" + DataBaseName + "\""; String result = Execute(sql, connectionString); return result.Equals("success"); } #region 資料庫表操作 /// <summary> /// 判斷資料庫中是否存在指定名稱的表 /// </summary> /// <param name="TAB">表名稱</param> /// <param name="connectionString">資料庫連線串</param> /// <returns></returns> public static Boolean ExistTab(string TAB, string connectionString) { // 查詢表是否存在: select name from sys.tables where name='資料表1' String sql = "select name from sys.tables where name='" + TAB + "'"; List<string> resultList = ExecuteList(sql, connectionString); String data = resultList.Count == 0 ? "" : resultList[0]; return (data.Equals(TAB)); } /// <summary> /// 建立指定名稱的表 /// </summary> /// <param name="TAB">資料表名稱</param> /// <param name="ColumnInfo">列名稱,列長度資訊</param> /// <param name="connectionString"></param> /// <returns></returns> public static bool CreateTable(String TAB, Dictionary<string, int> ColumnInfo, string connectionString) { //if (ExistTab(TAB, connectionString)) return true; // 若已存在資料表,則無需再建立 //CREATE TABLE [dbo].[Log_All] //( // [ID] INT NOT NULL PRIMARY KEY IDENTITY(100,1), // [日期] NCHAR(30) NULL, // [資訊] NCHAR(300) NULL //) // 生成資料表sql命令 StringBuilder builder = new StringBuilder(); builder.AppendLine("CREATE TABLE [dbo].[" + TAB + "] "); builder.AppendLine("( "); builder.AppendLine(" [ID] INT NOT NULL PRIMARY KEY IDENTITY(100,1), "); // 新增主鍵ID為自增,從100開始 foreach (string key in ColumnInfo.Keys) { string Name = key.Trim(); int Len = ColumnInfo[key]; builder.AppendLine(" [" + Name + "] NCHAR(" + Len + ") NULL, "); } builder.AppendLine(") "); // 執行 String sql = builder.ToString(); String data = Execute(sql, connectionString); return (data.Trim().ToLower().Equals("success")); } /// <summary> /// 刪除當前資料庫中的TAB表 /// </summary> public static bool DeletTable(String TAB, string connectionString) { string sql = "DROP TABLE \"" + TAB + "\""; String result = Execute(sql, connectionString); return result.Equals("success"); } /// <summary> /// 向表中插入新的資料 /// </summary> /// <param name="TAB">表名稱</param> /// <param name="values">列資料</param> /// <returns>新生成的資料行ID</returns> public static string InsetValue(string TAB, List<string> values, string connectionString) { //if (!ExistTab(TAB, connectionString)) return "fail"; // 若無資料表,則插入資料失敗 //insert into Log_All(日期, 資訊) Values('日期1', '資訊1') //insert into Log_All(日期, 資訊) output inserted.id Values('日期4', '資訊4') //insert into Log_All output inserted.id Values('日期x', '資訊x') StringBuilder builder = new StringBuilder(); builder.AppendLine("insert into " + TAB + " output inserted.id Values"); builder.AppendLine("( "); bool isfirst = true; foreach (string value in values) { builder.Append((isfirst ? "\r\n" : ", \r\n") + "'" + value + "'"); isfirst = false; } builder.AppendLine(") "); String sql = builder.ToString(); String data = ExecuteList(sql, connectionString)[0]; return data; } /// <summary> /// 刪除TAB表中,KeyName主鍵值為KeyValue的所有資料項 /// </summary> /// <param name="TAB">表名稱</param> /// <param name="Key">主鍵值</param> /// <returns></returns> public static bool DeletValue(string TAB, string KeyValue, string connectionString, string KeyName = "ID") { String sql = "delete from " + TAB + " where " + KeyName + "='" + KeyValue + "'"; ; String result = Execute(sql, connectionString); return result.Equals("success"); } /// <summary> /// 修改TAB表所有標籤為KEY的所有資料 /// </summary> /// <param name="TAB">表名稱</param> /// <param name="KeyValue">主鍵值</param> /// <param name="datas">待修改的資料資訊</param> /// <param name="connectionString"></param> /// <param name="KeyName">主鍵名稱</param> /// <returns></returns> public static string UpdateValue(string TAB, string KeyValue, Dictionary<string, string> datas, string connectionString, string KeyName="ID" ) { // UPDATE Person SET Address = 'Zhongshan 23', City = 'Nanjing' WHERE LastName = 'Wilson' StringBuilder builder = new StringBuilder(); bool isFirst = true; foreach (string key in datas.Keys) { builder.Append((isFirst ? " " : ", ") + key + " = " + "'" + datas[key] + "'"); isFirst = false; } String sql = "update " + TAB + " set " + builder.ToString() + " where " + KeyName + "='" + KeyValue + "'"; String data = Execute(sql, connectionString); return data; } /// <summary> /// 查詢TAB表,KeyName為KeyValue的所有資料項 /// </summary> /// <param name="TAB"></param> /// <param name="KeyValue"></param> /// <param name="connectionString"></param> /// <param name="KeyName"></param> /// <param name="columns">查詢的列名稱</param> /// <returns></returns> public static string SelectValue(string TAB, string KeyValue, string connectionString, string KeyName = "ID", List<string> columns = null) { string selectColumn = getCondition(columns); String sql = "select " + selectColumn + " from [" + TAB + "]" + (KeyName.Equals("") ? "" : " where " + KeyName + "='" + KeyValue + "'"); String data = Execute(sql, connectionString); return data; } /// <summary> /// 查詢TAB表,KeyName為KeyValue的所有資料項 /// </summary> /// <param name="TAB"></param> /// <param name="KeyValue"></param> /// <param name="connectionString"></param> /// <param name="KeyName"></param> /// <param name="columns">查詢的列名稱</param> /// <returns></returns> public static List<string> SelectValueList(string TAB, string KeyValue, string connectionString, string KeyName = "ID", List<string> columns=null) { string selectColumn = getCondition(columns); String sql = "select " + selectColumn + " from [" + TAB + "]" + (KeyName.Equals("") ? "" : " where " + KeyName + "='" + KeyValue + "'"); List<String> list = ExecuteList(sql, connectionString); return list; } /// <summary> /// 組合paramList中的引數資訊 /// </summary> /// <param name="paramList"></param> /// <returns></returns> private static string getCondition(List<string> paramList = null) { string Condition = "*"; if (paramList != null && paramList.Count > 0) { StringBuilder builder = new StringBuilder(); bool isFirst = true; foreach (string key0 in paramList) { string key = key0.Trim(); if (!key.Equals("")) { builder.Append((isFirst ? " " : ", ") + key); isFirst = false; } } Condition = builder.ToString(); if (Condition.Trim().Equals("")) Condition = "*"; } return Condition; } #endregion } }