using System;
using System.Collections.Generic;
using System.Text;
using System.Data.SqlClient;
using System.Net;
using System.Data;
using System.Configuration;
namespace NewsLib.DAO
{
public class SqlHelper
{
//自动获取主机名
string hostName = "192.168.0.188";//Dns.GetHostName();
//创建sqlconnection对象
SqlConnection conn = null;
//查找连接字符串
public static readonly string ConnectionString = ConfigurationManager.ConnectionStrings["newsConnString"].ConnectionString;
/// <summary>
/// 创建连接 并打开连接
/// </summary>
/// <returns></returns>
public SqlConnection InnitConnect()
{
try
{
conn = new SqlConnection();
conn.ConnectionString = ConnectionString; //"Persist Security Info=False;User ID=sa;Initial Catalog=NewsInfo;Data Source=" + hostName;
conn.Open();
return conn;
}
catch (Exception e)
{
Console.Write(e.Message);
}
return null;
}
/// <summary>
/// 执行 查询
/// 操作数据的形式 是以存储过程的形式
/// </summary>
/// <param name="storeProcName">存储过程名</param>
/// <param name="pars">参数集合</param>
/// <returns>返回有个SqlDataSet对象 保存所查询的信息</returns>
public DataSet ExecuteDataset(string storeProcName, SqlParameter[] pars)
{
DataSet ds = new DataSet();
try
{
using (SqlConnection conn = InnitConnect())
{
using (SqlCommand cmd = new SqlCommand())
{
cmd.CommandType = CommandType.StoredProcedure;
//连接对象
cmd.Connection = conn;
//指定存储过程名
cmd.CommandText = storeProcName;
//以数组的形式 指定参数列表
cmd.Parameters.AddRange(pars);
SqlDataAdapter sda = new SqlDataAdapter(cmd);
//填充dataset对象
sda.Fill(ds);
int a = ds.Tables[0].Rows.Count;
return ds;
}
}
}
catch(Exception e)
{
Console.WriteLine(e.Message);
}
return null;
}
/// <summary>
/// 执行 分页查询
/// 操作数据的形式 是以存储过程的形式
/// </summary>
/// <param name="storeProcName">存储过程名</param>
/// <param name="pars">参数集合</param>
/// <param name="pages" >返回页数和记录数</parm>
/// <returns>返回有个SqlDataSet对象 保存所查询的信息</returns>
public DataSet ExecuteDatasetByPageIndex(string storeProcName, SqlParameter[] pars,ref string[] pages)
{
DataSet ds = new DataSet();
pages = new string[2];
try
{
using (SqlConnection conn = InnitConnect())
{
using (SqlCommand cmd = new SqlCommand())
{
cmd.CommandType = CommandType.StoredProcedure;
//连接对象
cmd.Connection = conn;
//指定存储过程名
cmd.CommandText = storeProcName;
//以数组的形式 指定参数列表
cmd.Parameters.AddRange(pars);
SqlDataAdapter sda = new SqlDataAdapter(cmd);
//填充dataset对象
sda.Fill(ds);
pages[0] = cmd.Parameters["@allRecord"].Value.ToString ();
pages[1] = cmd.Parameters["@pageCount"].Value.ToString ();
return ds;
}
}
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
return null;
}
/// <summary>
/// 执行 查询
/// 操作数据的形式 是以存储过程的形式
/// </summary>
/// <param name="storeProcName">存储过程名</param>
/// <returns>返回有个SqlDataSet对象 保存所查询的信息</returns>
public DataSet ExecuteDataset(string storeProcName)
{
DataSet ds = new DataSet();
try
{
using (SqlConnection conn = InnitConnect())
{
//以commandText和连接 实例化一个SqlDataAdapter
SqlDataAdapter sda = new SqlDataAdapter(storeProcName,conn);
//填充dataset对象
sda.Fill(ds);
return ds;
}
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
return null;
}
/// <summary>
/// 更新 或删除 增加
/// 以存储过程的形式 添加 擅长 修改数据
/// 如果影响的行数大于0 说明有行被影响了 返回true 否则false
/// </summary>
/// <param name="storeProcName">存储过程名</param>
/// <param name="pars">参数列表</param>
/// <returns></returns>
public bool ExecuteNonQuery(string storeProcName, SqlParameter[] pars)
{
try
{
using (SqlConnection conn = InnitConnect())
{
using (SqlCommand cmd = new SqlCommand())
{
cmd.CommandType = CommandType.StoredProcedure;
//连接对象
cmd.Connection = conn;
//指定存储过程名
cmd.CommandText = storeProcName;
//循环给参数 赋值
cmd.Parameters.AddRange(pars);
//返回影响的行数
int m = cmd.ExecuteNonQuery();
if (m > 0)
return true;
else
return false;
}
}
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
return false ;
}
/// <summary>
/// 根据存储过程 查找存储过程的参数
/// </summary>
/// <param name="procName">存储过程名</param>
/// <returns></returns>
public SqlParameter[] GetParameterByProcName(string procName)
{
//参数 数组
SqlParameter[] pms = null;
try
{
using (conn = new SqlConnection())
{
InnitConnect();
//命令对象
using (SqlCommand cmd = new SqlCommand())
{
cmd.CommandType = CommandType.StoredProcedure;
//存储过程名
cmd.CommandText = procName;
cmd.Connection = conn;
//清楚参数
cmd.Parameters.Clear();
//执行cmd 对象 返回参数数组
SqlCommandBuilder.DeriveParameters(cmd);
pms = new SqlParameter[cmd.Parameters.Count - 1];
for (int i = 1; i < cmd.Parameters.Count; i++)
{
// 在此要clone参数列表 不能直接给 因为唯一性 应用接口CLONE
//注意cmd返回的第一个参数 对操作来说是无效的 从第二个开始
pms[i - 1] = (SqlParameter)((ICloneable)cmd.Parameters[i]).Clone();
}
}
}
return pms;
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
return null;
}
}
}