ADO.Net中通过HashTable对SqlParameter赋值的三种方法和返回DataTable的两种方式
2008-01-31 17:13
441 查看
一、得到数据库连接
/// <summary>
/// 得到数据连接
/// </summary>
/// <returns>返回连接字符串</returns>
private string getConnectionString()
{
string strConn = ConfigurationSettings.AppSettings["ConnectionString"].ToString();
return strConn;
}
二、执行操作
/// <summary>
/// 执行sqlCommand
/// </summary>
/// <param name="sqlCommand">待执行的sql语句或存储过程名</param>
/// <param name="htParameters">参数集</param>
/// <returns>数据集</returns>
public DataTable ExecuteSqlCommand(string sqlCommand,Hashtable htParameters)
{
string strConn = this.getConnectionString();
SqlConnection sqlConn = new SqlConnection(strConn);
SqlTransaction sqlTran = sqlConn.BeginTransaction();
DataTable dtReturn = new DataTable();
try
{
if (sqlConn.State == ConnectionState.Closed)
{
sqlConn.Open();
}
SqlCommand sqlCom = sqlConn.CreateCommand();
sqlCom.CommandType = CommandType.Text;
sqlCom.CommandText = sqlCommand;
/*
//当sqlCommand为存储过程名时,应为如下所示
sqlCom.CommandType = CommandType.StoredProcedure;
sqlCom.CommandText = sqlCommand;
*/
/*
//以下为通过Hashtable对sqlcommand赋参的三种方法
*/
//
//
//方法一、通过IDictionaryEnumerator接口赋值
//
IDictionaryEnumerator iDictionary = htParameters.GetEnumerator();
while (iDictionary.MoveNext())
{
object objKey = iDictionary.Key;
sqlCom.Parameters.Add(objKey.ToString());
sqlCom.Parameters[objKey.ToString()].Value = iDictionary.Value;
}
//
//方法二、通过OBJECT赋值
//
foreach (object objKeys in htParameters.Keys)
{
sqlCom.Parameters.Add(objKeys);
sqlCom.Parameters[objKeys.ToString()].Value = htParameters[objKeys];
}
//
//方法三、通过DictionaryEntry赋值
//
foreach (DictionaryEntry dEntry in htParameters)
{
sqlCom.Parameters.Add(dEntry.Key);
sqlCom.Parameters[dEntry.Key.ToString()].Value = dEntry.Value;
}
/*
//以下为返回结果数据集以DataTable返回的两种方法
//
//DataReader数据不在内存中缓存,适合于检索大量数据
//
*/
//
//方法一、以SqlDataReader的形式返回DataTable数据集
//
SqlDataReader sqlReader = sqlCom.ExecuteReader();
if (sqlReader.HasRows)
{
dtReturn = sqlReader.GetSchemaTable();
}
//
//方法二、以DataSet的形式返回DataTable数据集
//
SqlDataAdapter sqlData = new SqlDataAdapter(sqlCom);
DataSet dtSet = new DataSet();
sqlData.Fill(dtSet);
dtReturn = dtSet.Tables[0];
}
catch (Exception ce)
{
sqlTran.Rollback();
throw new ApplicationException(ce.Message.ToString());
}
finally
{
sqlTran.Commit();
if (sqlConn.State == ConnectionState.Open)
{
sqlConn.Close();
}
}
return dtReturn;
}
/// <summary>
/// 得到数据连接
/// </summary>
/// <returns>返回连接字符串</returns>
private string getConnectionString()
{
string strConn = ConfigurationSettings.AppSettings["ConnectionString"].ToString();
return strConn;
}
二、执行操作
/// <summary>
/// 执行sqlCommand
/// </summary>
/// <param name="sqlCommand">待执行的sql语句或存储过程名</param>
/// <param name="htParameters">参数集</param>
/// <returns>数据集</returns>
public DataTable ExecuteSqlCommand(string sqlCommand,Hashtable htParameters)
{
string strConn = this.getConnectionString();
SqlConnection sqlConn = new SqlConnection(strConn);
SqlTransaction sqlTran = sqlConn.BeginTransaction();
DataTable dtReturn = new DataTable();
try
{
if (sqlConn.State == ConnectionState.Closed)
{
sqlConn.Open();
}
SqlCommand sqlCom = sqlConn.CreateCommand();
sqlCom.CommandType = CommandType.Text;
sqlCom.CommandText = sqlCommand;
/*
//当sqlCommand为存储过程名时,应为如下所示
sqlCom.CommandType = CommandType.StoredProcedure;
sqlCom.CommandText = sqlCommand;
*/
/*
//以下为通过Hashtable对sqlcommand赋参的三种方法
*/
//
//
//方法一、通过IDictionaryEnumerator接口赋值
//
IDictionaryEnumerator iDictionary = htParameters.GetEnumerator();
while (iDictionary.MoveNext())
{
object objKey = iDictionary.Key;
sqlCom.Parameters.Add(objKey.ToString());
sqlCom.Parameters[objKey.ToString()].Value = iDictionary.Value;
}
//
//方法二、通过OBJECT赋值
//
foreach (object objKeys in htParameters.Keys)
{
sqlCom.Parameters.Add(objKeys);
sqlCom.Parameters[objKeys.ToString()].Value = htParameters[objKeys];
}
//
//方法三、通过DictionaryEntry赋值
//
foreach (DictionaryEntry dEntry in htParameters)
{
sqlCom.Parameters.Add(dEntry.Key);
sqlCom.Parameters[dEntry.Key.ToString()].Value = dEntry.Value;
}
/*
//以下为返回结果数据集以DataTable返回的两种方法
//
//DataReader数据不在内存中缓存,适合于检索大量数据
//
*/
//
//方法一、以SqlDataReader的形式返回DataTable数据集
//
SqlDataReader sqlReader = sqlCom.ExecuteReader();
if (sqlReader.HasRows)
{
dtReturn = sqlReader.GetSchemaTable();
}
//
//方法二、以DataSet的形式返回DataTable数据集
//
SqlDataAdapter sqlData = new SqlDataAdapter(sqlCom);
DataSet dtSet = new DataSet();
sqlData.Fill(dtSet);
dtReturn = dtSet.Tables[0];
}
catch (Exception ce)
{
sqlTran.Rollback();
throw new ApplicationException(ce.Message.ToString());
}
finally
{
sqlTran.Commit();
if (sqlConn.State == ConnectionState.Open)
{
sqlConn.Close();
}
}
return dtReturn;
}
相关文章推荐
- ADO.NET2.0 异步处理的三种方式-wait方法
- ASP.Net 跨页面传值 通过Previous.FindControl方法(两种方式)
- asp.net 通过ajax方式调用webmethod方法使用自定义类传参及获取返回参数
- 通过ado.net获取数据得三种方式
- ADO.NET 从DataTable中获取某列含有的不同值的几种方式
- 用ADO.NET的ExecuteScalar方法返回单一值
- 通过Http接口及SolrNet 两种方法基于Solr5.5.1 实现CURD
- VB通过ADO连接SQL数据的两种方法
- Oracle 通过 Ado.net 调用Update 方法
- ADO.NET 中DataTable中加载数据又两种方法
- ASP.NET通过Base64String上传超过3M的文件时,出现“远程服务器返回错误: (500) 内部服务器错误。“,的解决方法
- ADO.NET 从DataTable中获取某列含有的不同值的几种方式
- asp.net中把有图片的execl导入到数据库(以二进制流的方式存放图片)中的两种方法
- vs2012下mfc程序通过ado方式使用access数据库编译的程序在xp底下无法使用解决方法
- RMAN的两种连接方式(每种连接方式的三种不同连接方法)
- ASP.NET MVC中 CKeditor 通过两种方法向后台传值以及编码、乱码问题
- asp.net利用Ajax和Jquery在前台向后台传参数并返回值,通过aspx.cs中的静态方法+WebMethod进行处理
- ADO.NET 连接数据库的另一种方法(通过配置文件和基类转化,适用于后期维护)
- 两个Repeater嵌套实现动态菜单(ado.net+sql和xml+Linq两种读取数据方式)
- ThinkPHP通过AJAX返回JSON的两种实现方法