自己写的一个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. IOS 修改UIAlertController的按钮标题的字体颜色,字号,内容

    IOS 修改UIAlertController的按钮标题的字体颜色,字号,内容 UIAlertController *alertVC = [UIAlertController alertControl ...

  2. php日常日志写入格式记录

    从数据库取出数据数组格式保存 file_put_contents('/tmp/bak_trusted_list'.date('H').'.php', '<?php return '.var_ex ...

  3. Flesch Reading Ease -POJ3371模拟

    Flesch Reading Ease Time Limit: 1000MS Memory Limit: 65536K Description Flesch Reading Ease, a reada ...

  4. 《利用python进行数据分析》读书笔记--第五章 pandas入门

    http://www.cnblogs.com/batteryhp/p/5006274.html pandas是本书后续内容的首选库.pandas可以满足以下需求: 具备按轴自动或显式数据对齐功能的数据 ...

  5. [DL学习笔记]从人工神经网络到卷积神经网络_2_卷积神经网络

    先一层一层的说卷积神经网络是啥: 1:卷积层,特征提取 我们输入这样一幅图片(28*28): 如果用传统神经网络,下一层的每个神经元将连接到输入图片的每一个像素上去,但是在卷积神经网络中,我们只把输入 ...

  6. centos6安装python3.4和pip3

    在安装了epel源的情况下,直接yum就可以安装python3.4 yum install python34 -ypython3 --version 没有自带pip3,从官网安装 wget --no- ...

  7. mybatis 如何使用乐观锁

    悲观锁的问题: 因为悲观锁大多数情况下依靠数据库的锁机制实现,以保证操作最大程度的独占性.如果加锁的时间过长,其他用户长时间无法访问,影响了程序的并发访问性,同时这样对数据库性能开销影响也很大,特别是 ...

  8. python基础 Day01 练习题

    1 字符串格式化 #!/urs/bin/env python name = input("Name: ") age = int(input("Age: ")) ...

  9. 微信小程序-数据缓存

    每个微信小程序都可以有自己的本地缓存,可以通过 wx.setStorage(wx.setStorageSync).wx.getStorage(wx.getStorageSync).wx.clearSt ...

  10. Javascript学习笔记:3种定义函数的方式

    ①使用函数声明语法定义函数 function sum(num1,num2){ return num1+num2; } ②使用函数表达式定义函数 var sum=function(num1,num2){ ...