新手对于dbhelper的疑问 对着书来学习,发现书本里面的项目的dal层全部调用一个类似于dbhelper的东西,那以后做项目都直接拷这个东西吗?固定的吗?对新手的学习很没好处,那dbhelp要自己写吗? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 MS都写了..你还要自己写....一般都够用了...LZ找个比较完善的版本吧... 问题是我是新手。。那我学的ado没用武之处··· 直接用或者先用个简单的。using System;using System.Collections.Generic;using System.Text;using System.Data;using System.Data.SqlClient;using System.Collections;namespace M_Common.SqlHelper{ /****************************** ******************************/ public class SqlHelper { private static SqlConnection cn = null; private static SqlCommand cmd = null; public SqlHelper() { } /// <summary> /// 判断连接状态 /// </summary> /// <returns>返回连接状态</returns> private static SqlConnection GetConn() { string ConnStr = M_Common.Helper.ConfigHelper.GetconnMsSql.ToString(); cn = new SqlConnection(ConnStr); if (cn.State != ConnectionState.Open) { cn.Open(); } return cn; } /// <summary> /// 获取某表的某个字段的最大值 /// </summary> /// <param name="FieldName">字段名</param> /// <param name="TableName">表明</param> /// <returns>返回最大值</returns> public static int GetMaxID(string FieldName, string TableName) { string strsql = "select max(" + FieldName + ")+1 from " + TableName; object obj = SqlHelper.GetSingle(strsql); if (obj == null) { return 1; } else { return int.Parse(obj.ToString()); } } /// <summary> /// 执行一条计算查询结果语句,返回查询结果(object)。 /// </summary> /// <param name="SQLString">计算查询结果语句</param> /// <returns>查询结果(object)</returns> public static object GetSingle(string SQLString) { using (SqlCommand cmd = new SqlCommand(SQLString, GetConn())) { try { object obj = cmd.ExecuteScalar(); if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value))) { return null; } else { return obj; } } catch (System.Data.SqlClient.SqlException e) { throw e; } } } /// <summary> /// 带参数返回一行一列ExecuteScalar /// </summary> /// <param name="cmdtext">存储过程或者SQL语句</param> /// <param name="para">参数数组</param> /// <param name="ct">命令类型</param> /// <returns>返回一行一列value</returns> public static int ExecuteScalar(string cmdtext, SqlParameter[] para, CommandType ct) { int value; try { cmd = new SqlCommand(cmdtext, GetConn()); cmd.CommandType = ct; cmd.Parameters.AddRange(para); value = Convert.ToInt32(cmd.ExecuteScalar()); } catch (Exception ex) { throw ex; } finally { if (cn.State == ConnectionState.Open) { cn.Close(); } } return value; } /// <summary> /// 执行无参的操作 /// </summary> /// <param name="cmdtext">SQL语句或存储过程</param> /// <param name="ct">CMD的类型</param> /// <returns>处理后的值</returns> public static int ExecuteNonQuery(string cmdtext, CommandType ct) { int value; try { cmd = new SqlCommand(cmdtext, GetConn()); cmd.CommandType = ct; value = cmd.ExecuteNonQuery() > 0 ? 1 : 0; } catch (Exception ex) { throw ex; } finally { if (cn.State == ConnectionState.Open) { cn.Close(); } } return value; } /// <summary> /// 执行带参的增.删.改操作 /// </summary> /// <param name="cmdtext">SQL语句或存储过程</param> /// <param name="para">参数数组</param> /// <param name="ct">CMD类型</param> /// <returns>处理后的值</returns> public static int ExecuteNonQuery(string cmdtext, SqlParameter[] para, CommandType ct) { int value; using (cmd = new SqlCommand(cmdtext, GetConn())) { cmd.CommandType = ct; cmd.Parameters.AddRange(para); value = cmd.ExecuteNonQuery() > 0 ? 1 : 0; } return value; } /// <summary> /// 执行无参的查询 返回DataTable /// </summary> /// <param name="cmdtext">存储过程名称或SQL语句</param> /// <param name="ct">命令类型</param> /// <returns>返回DataTable</returns> public static DataTable ReturnDataTable(string cmdtext, CommandType ct) { DataTable dt = new DataTable(); cmd = new SqlCommand(cmdtext, GetConn()); //类型 cmd.CommandType = ct; SqlDataReader dr = null; //连接池 读完自动释放Connection using (dr = cmd.ExecuteReader(CommandBehavior.CloseConnection)) { //用委托填充DataTable dt.Load(dr); } return dt; } /// <summary> /// 执行有参的查询 返回DataTable /// </summary> /// <param name="cmdtext">存储过程名称或SQL语句</param> /// <param name="ct">命令类型</param> /// <param name="para">参数数组</param> /// <returns>返回DataTable</returns> public static DataTable ReturnDataTable(string cmdtext, CommandType ct, SqlParameter[] para) { DataTable dt = new DataTable(); cmd = new SqlCommand(cmdtext, GetConn()); //类型 cmd.CommandType = ct; //参数数组 cmd.Parameters.AddRange(para); SqlDataReader dr = null; //连接池 读完自动释放Connection using (dr = cmd.ExecuteReader(CommandBehavior.CloseConnection)) { //用委托填充DataTable dt.Load(dr); } return dt; } /// <summary> /// 执行无参的查询 返回DataSet /// </summary> /// <param name="cmdtext">存储过程名称或SQL语句</param> /// <param name="ct">命令类型</param> /// <returns>返回DataSet</returns> public static DataSet ReturnDataSet(string cmdtext, CommandType ct) { cmd = new SqlCommand(cmdtext, GetConn()); //类型 cmd.CommandType = ct; SqlDataAdapter da = new SqlDataAdapter(cmd); DataSet ds = new DataSet(); try { da.Fill(ds); } catch (Exception err) { throw err; } finally { if (cn.State != ConnectionState.Closed) { cn.Close(); } } return ds; } /// <summary> /// 执行有参的查询 返回DataSet /// </summary> /// <param name="cmdtext">存储过程名称或SQL语句</param> /// <param name="ct">命令类型</param> /// <param name="para">参数数组</param> /// <returns>返回DataSet</returns> public static DataSet ReturnDataSet(string cmdtext, CommandType ct, SqlParameter[] para) { cmd = new SqlCommand(cmdtext, GetConn()); //类型 cmd.CommandType = ct; //参数数组 cmd.Parameters.AddRange(para); SqlDataAdapter da = new SqlDataAdapter(cmd); DataSet ds = new DataSet(); try { da.Fill(ds); } catch (Exception err) { throw err; } finally { if (cn.State != ConnectionState.Closed) { cn.Close(); } } return ds; } }} 你用多了,自然而然的就理解了。当初我也是直接找个比较完善的Dbhelp来抄袭,用的多了,就算不去刻意思考,也明白原来这么用是这么回事啊, 怎么可能是固定的,就算是 dal, bll 什么的也不是"固定"的...不需要学怎么写dbhelper,学好怎么用ado.net就好了.. DBHelper 就是一个对数据进行操作的类文件。你现在刚开始,应该是所有的DAL层的对数据库的操作都会调用它,多用几次,知道每个方法是干什么的就行了,不用刻意的死记硬背,比如你先要执行一个数据库查询的操作,肯定得调用DBHelper里面的创建连接的方法,然后在调用查询的方法,最后在关闭。只要你明白这个流程就行了。还有,如果你还是学生,我不知道现在考试是怎么考法了,我们上学时,老师还专门考过这个DBHelper,用记事本写。呵呵 嗯 对这个问题大概有点了解 之前发了个帖。。貌似被删掉了 在这个贴在问问吧:迷惘了。感觉学习遇上了瓶颈。怎么继续下去?我都是根据书本每个知识点知识点学,我的计划是,学完所以知识点,然后通过书本后面的各种项目来训练熟练程度,争取在9月份开学能到达可以找工作的程度,现在处于找项目来巩固知识点阶段。但是我发现。书本的项目中的ado用的是他们集成的dbhelper,而且很少的地方用到知识点,例如多态,委托,事件之类的知识点达不到我想巩固的目的,想问下接来下应该怎样?我还不太懂什么时候用什么例如什么时候用多态 什么时候用泛集,我的目的就是想通过项目来巩固这些知识点。让我自己感悟什么时候用什么的,不过现在的例子貌似达不到我的目的。迷惘,请问该怎样?按照书本的继续写代码吗?就我个人来说,我觉得我学习一定要多练我才懂。多敲代码。啊啊啊好怕9月份大四开学了怕找不到工作。。 我毕业的时候还没楼主会的多,.net还是工作以后才自学的 c#反射的作用 关于字符串数组的问题? C# 获取 EXECL版本信息? 用UPDATE能直接更新整行数据么?? 怎么样过滤掉DataSet里面重复的纪录 比较有创意的C#数据调出 C#的发展前景? 如何将GRID的一列锁定使水平滚动时不移动? 一个奇怪的问题:-( CSDN.NET助手0.1BETA版发布!!! 多线程导致程序无响应问题 TreeView 数据库
MS都写了..你还要自己写....一般都够用了...LZ找个比较完善的版本吧...
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.SqlClient;
using System.Collections;namespace M_Common.SqlHelper
{ /****************************** ******************************/
public class SqlHelper
{
private static SqlConnection cn = null;
private static SqlCommand cmd = null; public SqlHelper()
{ } /// <summary>
/// 判断连接状态
/// </summary>
/// <returns>返回连接状态</returns>
private static SqlConnection GetConn()
{
string ConnStr = M_Common.Helper.ConfigHelper.GetconnMsSql.ToString();
cn = new SqlConnection(ConnStr);
if (cn.State != ConnectionState.Open)
{
cn.Open();
}
return cn;
}
/// <summary>
/// 获取某表的某个字段的最大值
/// </summary>
/// <param name="FieldName">字段名</param>
/// <param name="TableName">表明</param>
/// <returns>返回最大值</returns>
public static int GetMaxID(string FieldName, string TableName)
{
string strsql = "select max(" + FieldName + ")+1 from " + TableName;
object obj = SqlHelper.GetSingle(strsql);
if (obj == null)
{
return 1;
}
else
{
return int.Parse(obj.ToString());
}
}
/// <summary>
/// 执行一条计算查询结果语句,返回查询结果(object)。
/// </summary>
/// <param name="SQLString">计算查询结果语句</param>
/// <returns>查询结果(object)</returns>
public static object GetSingle(string SQLString)
{
using (SqlCommand cmd = new SqlCommand(SQLString, GetConn()))
{
try
{
object obj = cmd.ExecuteScalar();
if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value)))
{
return null;
}
else
{
return obj;
}
}
catch (System.Data.SqlClient.SqlException e)
{
throw e;
}
} } /// <summary>
/// 带参数返回一行一列ExecuteScalar
/// </summary>
/// <param name="cmdtext">存储过程或者SQL语句</param>
/// <param name="para">参数数组</param>
/// <param name="ct">命令类型</param>
/// <returns>返回一行一列value</returns>
public static int ExecuteScalar(string cmdtext, SqlParameter[] para, CommandType ct)
{
int value;
try
{
cmd = new SqlCommand(cmdtext, GetConn());
cmd.CommandType = ct;
cmd.Parameters.AddRange(para);
value = Convert.ToInt32(cmd.ExecuteScalar());
}
catch (Exception ex)
{
throw ex;
}
finally
{
if (cn.State == ConnectionState.Open)
{
cn.Close();
}
}
return value;
}
/// <summary>
/// 执行无参的操作
/// </summary>
/// <param name="cmdtext">SQL语句或存储过程</param>
/// <param name="ct">CMD的类型</param>
/// <returns>处理后的值</returns>
public static int ExecuteNonQuery(string cmdtext, CommandType ct)
{
int value;
try
{
cmd = new SqlCommand(cmdtext, GetConn());
cmd.CommandType = ct;
value = cmd.ExecuteNonQuery() > 0 ? 1 : 0;
}
catch (Exception ex)
{
throw ex;
}
finally
{
if (cn.State == ConnectionState.Open)
{
cn.Close();
}
}
return value;
} /// <summary>
/// 执行带参的增.删.改操作
/// </summary>
/// <param name="cmdtext">SQL语句或存储过程</param>
/// <param name="para">参数数组</param>
/// <param name="ct">CMD类型</param>
/// <returns>处理后的值</returns>
public static int ExecuteNonQuery(string cmdtext, SqlParameter[] para, CommandType ct)
{
int value;
using (cmd = new SqlCommand(cmdtext, GetConn()))
{
cmd.CommandType = ct;
cmd.Parameters.AddRange(para);
value = cmd.ExecuteNonQuery() > 0 ? 1 : 0;
}
return value;
} /// <summary>
/// 执行无参的查询 返回DataTable
/// </summary>
/// <param name="cmdtext">存储过程名称或SQL语句</param>
/// <param name="ct">命令类型</param>
/// <returns>返回DataTable</returns>
public static DataTable ReturnDataTable(string cmdtext, CommandType ct)
{
DataTable dt = new DataTable();
cmd = new SqlCommand(cmdtext, GetConn());
//类型
cmd.CommandType = ct;
SqlDataReader dr = null;
//连接池 读完自动释放Connection
using (dr = cmd.ExecuteReader(CommandBehavior.CloseConnection))
{
//用委托填充DataTable
dt.Load(dr);
}
return dt;
} /// <summary>
/// 执行有参的查询 返回DataTable
/// </summary>
/// <param name="cmdtext">存储过程名称或SQL语句</param>
/// <param name="ct">命令类型</param>
/// <param name="para">参数数组</param>
/// <returns>返回DataTable</returns>
public static DataTable ReturnDataTable(string cmdtext, CommandType ct, SqlParameter[] para)
{
DataTable dt = new DataTable();
cmd = new SqlCommand(cmdtext, GetConn());
//类型
cmd.CommandType = ct;
//参数数组
cmd.Parameters.AddRange(para);
SqlDataReader dr = null;
//连接池 读完自动释放Connection
using (dr = cmd.ExecuteReader(CommandBehavior.CloseConnection))
{
//用委托填充DataTable
dt.Load(dr);
}
return dt;
} /// <summary>
/// 执行无参的查询 返回DataSet
/// </summary>
/// <param name="cmdtext">存储过程名称或SQL语句</param>
/// <param name="ct">命令类型</param>
/// <returns>返回DataSet</returns>
public static DataSet ReturnDataSet(string cmdtext, CommandType ct)
{
cmd = new SqlCommand(cmdtext, GetConn());
//类型
cmd.CommandType = ct;
SqlDataAdapter da = new SqlDataAdapter(cmd);
DataSet ds = new DataSet();
try
{
da.Fill(ds);
}
catch (Exception err)
{ throw err;
}
finally
{
if (cn.State != ConnectionState.Closed)
{
cn.Close();
}
}
return ds;
}
/// <summary>
/// 执行有参的查询 返回DataSet
/// </summary>
/// <param name="cmdtext">存储过程名称或SQL语句</param>
/// <param name="ct">命令类型</param>
/// <param name="para">参数数组</param>
/// <returns>返回DataSet</returns>
public static DataSet ReturnDataSet(string cmdtext, CommandType ct, SqlParameter[] para)
{
cmd = new SqlCommand(cmdtext, GetConn());
//类型
cmd.CommandType = ct;
//参数数组
cmd.Parameters.AddRange(para);
SqlDataAdapter da = new SqlDataAdapter(cmd);
DataSet ds = new DataSet();
try
{
da.Fill(ds);
}
catch (Exception err)
{ throw err;
}
finally
{
if (cn.State != ConnectionState.Closed)
{
cn.Close();
}
}
return ds;
} }
}
不需要学怎么写dbhelper,学好怎么用ado.net就好了..
比如你先要执行一个数据库查询的操作,肯定得调用DBHelper里面的创建连接的方法,然后在调用查询的方法,最后在关闭。只要你明白这个流程就行了。
还有,如果你还是学生,我不知道现在考试是怎么考法了,我们上学时,老师还专门考过这个DBHelper,用记事本写。呵呵
我都是根据书本每个知识点知识点学,我的计划是,学完所以知识点,然后通过书本后面的各种项目来训练熟练程度,争取在9月份开学能到达可以找工作的程度,现在处于找项目来巩固知识点阶段。但是我发现。书本的项目中的ado用的是他们集成的dbhelper,而且很少的地方用到知识点,例如多态,委托,事件之类的知识点达不到我想巩固的目的,想问下接来下应该怎样?我还不太懂什么时候用什么例如什么时候用多态 什么时候用泛集,我的目的就是想通过项目来巩固这些知识点。让我自己感悟什么时候用什么的,不过现在的例子貌似达不到我的目的。迷惘,请问该怎样?按照书本的继续写代码吗?就我个人来说,我觉得我学习一定要多练我才懂。多敲代码。啊啊啊好怕9月份大四开学了怕找不到工作。。