自己写的一个SqlHelper,感觉使用起来挺方便的
自己写的一个SqlHelper,感觉使用起来挺方便的
using System;
using System.Data;
using System.Collections.Generic;
using System.Configuration;
using System.Text;
using System.IO;
using System.Data.SqlClient;
namespace NdfDeviceNetC
{
public class SqlHelper
{
//数据库连接字符串
private readonly static string connstr = @"Data Source=127.0.0.1;Initial Catalog=DB;Persist Security Info=True;User ID=sa;Password=123456"; private static List<bool> IsBusy = new List<bool>();
private static List<SqlConnection> connList = new List<SqlConnection>();//链接列表,解决打开链接消耗时间问题
static SqlHelper()
{
//打开10个链接
for (int i = ; i < ; i++)
{
SqlConnection conn = new SqlConnection(connstr);
conn.Open();
connList.Add(conn);
IsBusy.Add(false);
}
}
/// <summary>
/// 获得一个可用的链接
/// </summary>
/// <returns></returns>
private static SqlConnection GetConnection()
{
int index = IsBusy.IndexOf(false);
if (index == -)
{
return null;
}
IsBusy[index] = true;
SqlConnection conn = connList[index];
if (conn.State==ConnectionState.Closed)
{
//如果链接已经关闭,重新打开
conn.Open();
}
return connList[index];
} /// <summary>
/// 释放链接
/// </summary>
/// <param name="conn"></param>
private static void FreeConnect(SqlConnection conn)
{
int index = connList.IndexOf(conn);
ConnectionState state = conn.State;
IsBusy[index] = false;
}
#region 组织select命令
public static string CmdForSelectTable(string tableName, string selctColumns, string whereStr)
{
string cmdstr = string.Format("SELECT {1} FROM [{0}] WHERE {2}", tableName, selctColumns, whereStr);
return cmdstr;
}
public static string CmdForSelectTable(string tableName, string selctColumns, string whereStr, int top)
{
string cmdstr = string.Format("SELECT TOP {3} {1} FROM [{0}] WHERE {2}", tableName, selctColumns, whereStr, top);
return cmdstr;
}
public static string CmdForSelectTable(string tableName, string selctColumns, string whereStr, string orderby)
{
string cmdstr = string.Format("SELECT {1} FROM [{0}] WHERE {2} ORDER BY {3}", tableName, selctColumns, whereStr, orderby);
return cmdstr;
}
public static string CmdForSelectTable(string tableName, string selctColumns, string whereStr, int top,string orderby)
{
string topStr = "";
string orderbyStr = "";
if (top > )
{
topStr = "TOP " + top;
}
if (!string.IsNullOrEmpty(orderby))
{
orderbyStr = " ORDER BY " + orderby;
}
string cmdstr = string.Format("SELECT {3} {1} FROM [{0}] WHERE {2}{4}", tableName, selctColumns, whereStr, topStr, orderbyStr);
return cmdstr;
}
public static string CmdForSelectMulitTable(List<string> tableNameList, string selctColumns, string whereStr,int top ,string orderby)
{
string topStr = "";
string orderbyStr = "";
string tableName = "";
foreach (string name in tableNameList)
{
tableName += name+" ";
}
if (top>)
{
topStr = "TOP " + top;
}
if (!string.IsNullOrEmpty(orderby))
{
orderbyStr = " ORDER BY "+orderby;
}
string cmdstr = string.Format("SELECT {3} {1} FROM {0} WHERE {2}{4}", tableName, selctColumns, whereStr, topStr, orderbyStr);
return cmdstr;
}
#endregion
#region 组织插入和更新命令
private static string CmdForInsertTable(string tableName, List<string> valueList)
{
string columns = "";
string values = "";
foreach (string item in valueList)
{
int index = item.IndexOf('=');
columns += item.Substring(, index) + ",";
values += item.Substring(index+) + ",";
}
columns = columns.Trim(',');
values = values.Trim(',');
string sqlstr = string.Format("INSERT INTO [{0}] ({1}) VALUES ({2});select @@IDENTITY", tableName, columns, values);
return sqlstr;
}
private static string CmdForUpdateTable(string tableName, List<string> valueList, string whereStr)
{
string setStr = "";
foreach (string item in valueList)
{
setStr += item + ",";
}
setStr = setStr.Trim(',');
string sqlstr = string.Format("UPDATE [{0}] SET {1} where {2}", tableName, setStr, whereStr);
return sqlstr;
}
#endregion #region 查询 /// <summary>
/// 获得表结构
/// </summary>
/// <param name="tableName"></param>
/// <returns></returns>
public static DataTable GetTableClone(string tableName)
{
string cmdStr = "SELECT TOP 0 * FROM [" + tableName+"]";
SqlConnection conn = GetConnection();//公用
SqlCommand cmd = new SqlCommand(cmdStr, conn);
DataTable table = null;
try
{
SqlDataAdapter ad = new SqlDataAdapter(cmdStr, conn);
table = new DataTable();
ad.Fill(table);
}
catch
{
throw;
}
finally
{
FreeConnect(conn);
} return table;
}
/// <summary>
/// 根据命令,执行后返回表格
/// </summary>
/// <param name="cmdStr"></param>
/// <returns></returns>
public static DataTable GetTable(string cmdStr)
{
SqlConnection conn = GetConnection();//公用
SqlCommand cmd = new SqlCommand(cmdStr, conn);
DataTable table = null;
try
{
SqlDataAdapter ad = new SqlDataAdapter(cmdStr, conn);
table = new DataTable();
ad.Fill(table);
}
catch
{
throw;
}
finally
{
FreeConnect(conn);
}
return table; }
/// <summary>
/// 查询数据
/// </summary>
/// <param name="tableName"></param>
/// <param name="selctColumns"></param>
/// <param name="whereStr"></param>
/// <returns></returns>
public static DataTable GetTable(string tableName, string selctColumns, string whereStr)
{
string cmdStr = string.Format("SELECT {1} FROM [{0}]", tableName, selctColumns);
if (!string.IsNullOrEmpty(whereStr))
{
cmdStr += " WHERE " + whereStr;
} SqlConnection conn = GetConnection();//公用
SqlCommand cmd = new SqlCommand(cmdStr, conn);
DataTable table = null;
try
{
SqlDataAdapter ad = new SqlDataAdapter(cmdStr, conn);
table = new DataTable();
ad.Fill(table);
}
catch
{
throw;
}
finally
{
FreeConnect(conn);
}
return table;
}
/// <summary>
/// 根据命令,执行后返回一个值
/// </summary>
/// <param name="cmdStr"></param>
/// <returns></returns>
public string GetValue(string cmdStr)
{
return null;
} #endregion /// <summary>
/// 添加一行数据
/// </summary>
public static int Add(string tableName, List<string> valueList)
{
string cmdStr = CmdForInsertTable(tableName,valueList);
SqlConnection conn = GetConnection();//公用
SqlCommand cmd = new SqlCommand(cmdStr, conn);
int rowId = ;
try
{
object o = cmd.ExecuteScalar();
rowId = int.Parse(o.ToString());
}
catch
{
throw;
}
finally
{
FreeConnect(conn);
}
return rowId;
}
/// <summary>
/// 批量添加数据
/// </summary>
public static void AddTable(string tableName,DataTable table)
{ SqlConnection conn = GetConnection();//公用
SqlBulkCopy bulk = new SqlBulkCopy(conn);
bulk.DestinationTableName = tableName;
try
{
bulk.WriteToServer(table);
}
catch
{
throw;
}
finally
{
FreeConnect(conn);
}
}
/// <summary>
/// 更新数据
/// </summary>
public static bool Update(string tableName, List<string> valueList, string whereStr)
{
string cmdStr = CmdForUpdateTable(tableName, valueList, whereStr);
SqlConnection conn = GetConnection();//公用
SqlCommand cmd = new SqlCommand(cmdStr, conn);
bool ok = false;
try
{
cmd.ExecuteNonQuery();
ok = true;
}
catch
{
throw;
}
finally
{
FreeConnect(conn);
}
return ok;
}
/// <summary>
/// 删除数据
/// </summary>
public static bool Remove(string tableName, string whereStr)
{
string cmdStr = string.Format("DELETE FROM [{0}] WHERE ({1})", tableName, whereStr);
SqlConnection conn = GetConnection();//公用
SqlCommand cmd = new SqlCommand(cmdStr, conn);
bool ok = true;
try
{
cmd.ExecuteNonQuery();
ok = true;
}
catch
{
throw;
}
finally
{
FreeConnect(conn);
}
return ok;
}
/// <summary>
/// 转化表格中一行数据
/// </summary>
public static Dictionary<string, object> ConventRowToModel(DataTable dt,int rowIndex)
{
if (dt.Rows.Count==)
{
return null;
}
DataRow dr = dt.Rows[rowIndex];
Dictionary<string, object> list = new Dictionary<string, object>();
for (int i = ; i < dt.Columns.Count; i++)
{
string key = dt.Columns[i].ColumnName;
object value = dr[i];
list.Add(key, value);
}
return list;
}
}
}
查询数据
/// <summary>
/// 获得所有公司
/// </summary>
public static DataTable GetCompanyListAll()
{
//表Company
//列 Id,Name,FullName,Adress,Lng,Lat
string whereStr = "";
string Columns = "[Id],[Name],[FullName],[Adress],[Lng],[Lat]";
DataTable dt = SqlHelper.GetTable(CompanyTable1, Columns, whereStr); return dt;
}
/// <summary>
/// 获取公司信息
/// </summary>
public static Dictionary<string, object> GetCompanyInfo(int companyId)
{
//表CompanyTable
//列Id,Name,FullName,Adress,Lng,Lat
string Columns = "[Id],[Name],[FullName],[Adress],[Lng],[Lat]";
string WhereStr = "Id=" + companyId + "";
DataTable dt = new DataTable();
dt = SqlHelper.GetTable(CompanyTable1, Columns, WhereStr);
Dictionary<string, object> DtnList = SqlHelper.ConventRowToModel(dt, ); return DtnList;
}
插入数据
/// <summary>
/// 新增加一个公司
/// </summary>
public static int AddCompany()
{
List<string> valueList = new List<string>();
valueList.Add("Name='新添加公司'");
valueList.Add("FullName='新添加公司'");
int Id = SqlHelper.Add(CompanyTable1, valueList);
return Id;
}
更新数据
/// <summary>
/// 更新公司信息
/// </summary>
public static void UpdateCompany(Dictionary<string, string> companyInfo)
{
//表CompanyTable
//Name='"+companyInfo["Name"]+"'
//FullName=**FullName**
//Adress=**CompanyTable**
//Lng=**Lng**
//Lat=**Lat**
//whereStr Id=**CompanyId**
List<string> valueList = new List<string>();
valueList.Add("Name='" + companyInfo["Name"] + "'");
valueList.Add("FullName='" + companyInfo["FullName"] + "'");
valueList.Add("Adress='" + companyInfo["Adress"] + "'");
valueList.Add("Lng='" + companyInfo["Lng"] + "'");
valueList.Add("Lat='" + companyInfo["Lat"] + "'");
string whereStr = "Id=" + companyInfo["CompanyId"] + "";
bool ok = SqlHelper.Update(CompanyTable1, valueList, whereStr); }
删除
/// <summary>
/// 删除一个公司
/// </summary>
public static void RemoveCompany(int companyId)
{
//表CompanyTable
//whereStr Id=companyId
string whereStr = "Id=" + companyId + "";
bool ok = SqlHelper.Remove(CompanyTable1, whereStr);
}
多表联合查询
/// <summary>
/// 获取设备信息
/// </summary>
public static Dictionary<string, object> GetDeviceInfo(int deviceId)
{
//表DeviceBaseInfo
//列 CompanyId,DepartmentId,ProductType,ProductModel,Name,LoadWeight
//表Company
//列 FullName
//表Department
//列 Name
//表DeviceState
//列 Lng,Lat List<string> tableNameList = new List<string>();
tableNameList.Add("DeviceBaseInfo");
tableNameList.Add("LEFT JOIN DeviceState ON DeviceBaseInfo.Id=DeviceState.DeviceId");
tableNameList.Add("LEFT JOIN Company ON DeviceBaseInfo.CompanyId=Company.Id");
tableNameList.Add("LEFT JOIN Department ON DeviceBaseInfo.DepartmentId=Department.Id");
string selctColumns = "DeviceBaseInfo.Id,DeviceBaseInfo.CompanyId,DeviceBaseInfo.DepartmentId,Company.FullName AS CompanyName,Department.Name AS DepartmentName,ProductType,ProductModel,DeviceBaseInfo.Name,LoadWeight,DeviceState.Lng,DeviceState.Lat";
string whereStr = "DeviceBaseInfo.Id=" + deviceId;
string cmdStr = SqlHelper.CmdForSelectMulitTable(tableNameList, selctColumns, whereStr, , "DeviceBaseInfo.Id"); DataTable dt = SqlHelper.GetTable(cmdStr); Dictionary<string, object> data = SqlHelper.ConventRowToModel(dt, );
return data;
}
自己写的一个SqlHelper,感觉使用起来挺方便的的更多相关文章
- 用Python写了一个postgresql函数,感觉很爽
用Python写了一个postgresql函数,感觉很爽 CREATE LANGUAGE plpythonu; postgresql函数 CREATE OR REPLACE FUNCTION myfu ...
- 用c#写的一个局域网聊天客户端 类似小飞鸽
用c#写的一个局域网聊天客户端 类似小飞鸽 摘自: http://www.cnblogs.com/yyl8781697/archive/2012/12/07/csharp-socket-udp.htm ...
- 自己写的一个关于Linq to Entity 动态查询的例子
这两天一直想写一个动态查询的方式,先是晚上查询了一下,发现大家写的差不多都是一样的[如:http://www.cnblogs.com/ASPNET2008/archive/2012/10/28/274 ...
- CI(codeigniter)框架,routes.php设置正确,但是显示服务器错误,是__construct少写了一个下划线
今天弄了一下CI框架,大概看了一下文档,感觉CI框架非常精简,但是在做的时候遇到了问题,CI文档中提供了一个新闻系统的例子,所有工作都做完了,在浏览器中打开相对应的url是,却显示“服务器错误”,一点 ...
- 师兄写的一个JAVA播放器的源代码(转)
师兄写的一个JAVA播放器的源代码 MediaPlayer.java------------------------------------------------------------------ ...
- React自己写的一个地图小组件
由于今天比较闲,就玩了玩react,然后就封装了一个地图的组件,当然功能比较简单,因为就是随手写的小东西,但是由于引用了百度API和bee-mobile,所以用起来可能要薛微麻烦一点点,但是我保证,只 ...
- 试着用c写了一个多线程的同步
在Java中写多线程相关的程序简单很多,在多线程中需要同步的时候,使用synchronized就行了. 最近学习c的多线程与同步,感觉实现起来,要写的代码比较多一些,这也许是因为java封装的比较好吧 ...
- 这两天自己模仿写的一个Asp.Net的显示分页方法 附加实体转换和存储过程
之前自己一直用Aspnetpager控件来显示项目中的分页,但是每次都要拖一个aspnetpager的控件进去,感觉很不舒服,因为现在自己写的webform都不用服务器控件了,所以自己仿照aspnet ...
- 用canvas和原生js写的一个笨鸟先飞的小游戏(暂时只有一个关卡)
其中一个画布背景是一张图片,还有小鸟,两个管子的图片.暂时不知道怎么附上去就不添加了.这里只有源代码,css和js都是在html写着的,感觉比他们的容易吧,hah <!DOCTYPE html& ...
随机推荐
- 测试 Prism 语法高亮
测试 Prism 对 C 语言的语法高亮 #include <stdio.h> #include "math.h" int main(void) { long int ...
- 删除Management Data Warehouse (MDW) job失败
转:http://lzf328.blog.51cto.com/1196996/1349670 最近在清理一些不用的Job,发现几个跟MDW有关的.虽然Job已经被Disable, 但是没有被删除.尝试 ...
- JavaScript检测文件上传的类型与大小
$(function(){ $("#files").change(function(){ // 添加允许上传的文件类型 var exts = new Array(); exts[0 ...
- hibernateTools插件安装
先去官方网站工具页面 http://hibernate.org/tools/ 点击Download 然后出现 你可以选择在线安装 在eclipse里面.help->install->add ...
- JSON对象转换问题
今天调用别人接口遇到一个问题,原本约定的data格式为:JSON字符串,但本次返回了一个空字符串"", 大概是这样的 字符串类型的httpResult.data值为字result: ...
- [课程设计]Scrum 3.7 多鱼点餐系统开发进度(留言板选择方案)
Scrum 3.7 多鱼点餐系统开发进度(留言板选择方案) 1.团队名称:重案组 2.团队目标:长期经营,积累客户充分准备,伺机而行 3.团队口号:矢志不渝,追求完美 4.团队选题:餐厅到店点餐系统W ...
- 对魔兽世界、支付宝、Linux三类软件的简单分析
软工第一次作业: 软件有很多种,如工具类软件.游戏类软件.系统类软件,它们的运行方式也各种各样,如以单机方式运行.以网站方式运行或者以APP方式运行在手机端等,请选取三种软件,分析它们各自的特点. 这 ...
- [LeetCode_3] Longest Substring Without Repeating Characters
LeetCode: 3. Longest Substring Without Repeating Characters class Solution { public: int lengthOfLon ...
- docker私有库UI和添加私有库到本机能够push和pull
$ docker run -p 8080:8080 -e REG1=http://104.236.246.10:5000/v1/ atcol/docker-registry-ui$ docker ru ...
- Js零散知识点笔记
1.将类数组对象转换为数组 ES5: var arrLike = document.querySelectorAll('span'); var arr = Array.prototype.slice. ...