自己写的一个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,感觉使用起来挺方便的的更多相关文章

  1. 用Python写了一个postgresql函数,感觉很爽

    用Python写了一个postgresql函数,感觉很爽 CREATE LANGUAGE plpythonu; postgresql函数 CREATE OR REPLACE FUNCTION myfu ...

  2. 用c#写的一个局域网聊天客户端 类似小飞鸽

    用c#写的一个局域网聊天客户端 类似小飞鸽 摘自: http://www.cnblogs.com/yyl8781697/archive/2012/12/07/csharp-socket-udp.htm ...

  3. 自己写的一个关于Linq to Entity 动态查询的例子

    这两天一直想写一个动态查询的方式,先是晚上查询了一下,发现大家写的差不多都是一样的[如:http://www.cnblogs.com/ASPNET2008/archive/2012/10/28/274 ...

  4. CI(codeigniter)框架,routes.php设置正确,但是显示服务器错误,是__construct少写了一个下划线

    今天弄了一下CI框架,大概看了一下文档,感觉CI框架非常精简,但是在做的时候遇到了问题,CI文档中提供了一个新闻系统的例子,所有工作都做完了,在浏览器中打开相对应的url是,却显示“服务器错误”,一点 ...

  5. 师兄写的一个JAVA播放器的源代码(转)

    师兄写的一个JAVA播放器的源代码 MediaPlayer.java------------------------------------------------------------------ ...

  6. React自己写的一个地图小组件

    由于今天比较闲,就玩了玩react,然后就封装了一个地图的组件,当然功能比较简单,因为就是随手写的小东西,但是由于引用了百度API和bee-mobile,所以用起来可能要薛微麻烦一点点,但是我保证,只 ...

  7. 试着用c写了一个多线程的同步

    在Java中写多线程相关的程序简单很多,在多线程中需要同步的时候,使用synchronized就行了. 最近学习c的多线程与同步,感觉实现起来,要写的代码比较多一些,这也许是因为java封装的比较好吧 ...

  8. 这两天自己模仿写的一个Asp.Net的显示分页方法 附加实体转换和存储过程

    之前自己一直用Aspnetpager控件来显示项目中的分页,但是每次都要拖一个aspnetpager的控件进去,感觉很不舒服,因为现在自己写的webform都不用服务器控件了,所以自己仿照aspnet ...

  9. 用canvas和原生js写的一个笨鸟先飞的小游戏(暂时只有一个关卡)

    其中一个画布背景是一张图片,还有小鸟,两个管子的图片.暂时不知道怎么附上去就不添加了.这里只有源代码,css和js都是在html写着的,感觉比他们的容易吧,hah <!DOCTYPE html& ...

随机推荐

  1. nextAll([expr])

    描述: 给第一个div之后的所有元素加个类 HTML 代码: <div></div><div></div><div></div> ...

  2. ToJson

    /// <summary> /// DataTable转成Json /// </summary> /// <param name="jsonName" ...

  3. Dynamics AX 2012 R2 AIF 内部异常 output session was auto-closes

    今天调用AIF出现异常,异常信息如下 This chanel can no longer be used to send message as the output session was auto- ...

  4. 【转载】Log4j详细使用教程

    本文由林炳文Evankaka创作,出处http://blog.csdn.net/evankaka 日志是应用软件中不可缺少的部分,Apache的开源项目Log4j是一个功能强大的日志组件,提供方便的日 ...

  5. jqGrid subGrid配置 如何首次加载动态展开所有的子表格

    有时候需求需要默认加载表格的时候把子表格的数据也显示出来,经过研究相关SubGrids API配置如下: 属性 类型 描述 默认值 subGrid boolean 设置为true启用子表格.如果启用子 ...

  6. python中的generator(coroutine)浅析和应用

    背景知识: 在Python中一个function要运行起来,它在python VM中需要三个东西. PyCodeObject,这个保存了函数的代码 PyFunctionObject,这个代表一个虚拟机 ...

  7. 使用rsync和scp远程同步文件

    rsync1. rsync可以通过ssh隧道的方式传输文件夹: rsync -arv --progress clone user@host:remotedir loaldir . rsync通过ssh ...

  8. [翻译]lithium 安装

    安装 要求 web服务器 你需要一个web服务器来运行你的应用,最好是可以运行在你的本地机器上(你所有的开发不是都在这上面做的吗,不是吗?不是吗?).对于PHP而言,框架在很多web服务器上都运行的很 ...

  9. MySQL 安装 + 精简 + 配置

    MySQL 安装 + 精简 + 配置 下载安装 从官网 下载 Community Edition MySQL 5.6 版本 精简 根目录下只留 [data/bin/share] , my-defaul ...

  10. 公钥私钥和RSA算法

    1, RSA算法原理(一) http://www.ruanyifeng.com/blog/2013/06/rsa_algorithm_part_one.html 2, RSA算法原理(二) http: ...