读书人

哪位高手能提供一下asp.net2.0的数据库

发布时间: 2012-03-27 13:44:24 作者: rapoo

谁能提供一下asp.net2.0的数据库访问类
我是从1.1开始学的,虽然2.0可以完全运行1.1的类库,但是没有体会2.0的优越性能,如强类型的使用,能使用事务处理、存储过程、取数据(datareader、datatable、dataset)。
所以请高手给个全点的数据库访问类。谢谢!!

[解决办法]
petshop 4.0里带 的sqlhelper可以么
[解决办法]
微软企业库2.0
[解决办法]
自己写的,仿照PetShop3,有些改动。
'-------------------------------------------------
' ClassName:PublicDAL For SQL server
' Author:Eraysky(卞吉东)
' Company:Star-hope(斯达浩普)
' Function:基本数据操作类,提供常用的数据库连接查询执行功能。
' History:2006-10建类,2007-2更新
' 注意:
' 1 如果用此类操作数据库。各业物数据库类的SQL语句参数不再为?,而是@userid的形式
' 2 各实体业务类的获取参数getUserParameter方法也改为Sql形式
' 3 连接字符串直接连接SQL数据库,而不连接ODBC。
'-------------------------------------------------
Imports System.Data
Imports eraysky.Utility
Imports System.Data.SqlClient
Imports System.Configuration

Public Class PublicSQLDAL
Public Shared ReadOnly constr1 As String = ConfigurationManager.ConnectionStrings.Item( "erayskyConstr1 ").ToString
Public Shared ReadOnly constr2 As String = ConfigurationManager.ConnectionStrings.Item( "erayskyConstr2 ").ToString
Public Shared ReadOnly constr3 As String = ConfigurationManager.ConnectionStrings.Item( "erayskyConstr3 ").ToString


Public Shared ReadOnly Con1 As New SqlConnection(ConStr1)
Public Shared ReadOnly Con2 As New SqlConnection(ConStr2)
Public Shared ReadOnly Con3 As New SqlConnection(constr3)

'执行非查询语句,insert,update
Public Shared Function EXESQL(ByVal conn As SqlConnection, ByVal SQL As String, ByVal parms() As SqlParameter) As Integer
Dim result As Integer
If conn.State = ConnectionState.Closed Then conn.Open()
Dim cmd As SqlCommand = New SqlCommand
Try
PrepareCommand(cmd, conn, Nothing, CommandType.Text, SQL, parms)
result = cmd.ExecuteNonQuery()
cmd.Parameters.Clear()
Catch ex As Exception
result = -1
End Try
Return result
End Function
'执行查询语句,返回一个dataset
Public Shared Function GETDataSet(ByVal conn As SqlConnection, ByVal SQL As String, ByVal parms() As SqlParameter) As DataSet
Dim cmd As SqlCommand = New SqlCommand
Dim result As New DataSet
PrepareCommand(cmd, conn, Nothing, CommandType.Text, SQL, parms)
Try
Dim myadapter As SqlDataAdapter
myadapter = New SqlDataAdapter(cmd)
myadapter.Fill(result)
Catch ex As Exception
End Try
Return result
End Function
'执行查询语句,返回reader。
Public Shared Function GETReader(ByVal conn As SqlConnection, ByVal SQL As String, ByVal parms() As SqlParameter) As SqlDataReader
Dim cmd As SqlCommand = New SqlCommand
PrepareCommand(cmd, conn, Nothing, CommandType.Text, SQL, parms)
Dim result As SqlDataReader
Try
result = cmd.ExecuteReader()
Catch ex As Exception
result = Nothing
End Try
Return result
End Function
'执行查询语句,返回查询结果第一行,第一列值。
Public Shared Function GETScalar(ByVal conn As SqlConnection, ByVal SQL As String) As Object
Dim cmd As SqlCommand = New SqlCommand
PrepareCommand(cmd, conn, Nothing, CommandType.Text, SQL, Nothing)


Dim val As New Object
Try
val = cmd.ExecuteScalar()
Catch ex As Exception
End Try
Return val
End Function
'准备参数
Private Shared Sub PrepareCommand(ByVal cmd As SqlCommand, ByVal conn As SqlConnection, ByVal trans As SqlTransaction, ByVal cmdType As CommandType, ByVal cmdText As String, ByVal cmdParms() As SqlParameter)
If conn.State <> ConnectionState.Open Then
conn.Open()
End If
cmd.Connection = conn
cmd.CommandText = cmdText
If Not trans Is Nothing Then
cmd.Transaction = trans
End If
cmd.CommandType = cmdType
If Not cmdParms Is Nothing Then
Dim parm As SqlParameter
For Each parm In cmdParms
cmd.Parameters.Add(parm)
Next
End If
End Sub
End Class

[解决办法]
里面已经有返回Dataset了。就不需要DataTable了。
[解决办法]
petshop4.0的,可以照抄

说太长,贴不了,你自己看吧
[解决办法]

建议去看 data.yueue.cn 里的 yueueData 开源数据库组件


下面是贴的
yueueData 是什么?
yueueData 是一个.net 2.0 下的数据库组件,它对.net 2.0下的数据库连接,数据库命令,数据库管理等进行了封装,从而简化了操作,提升了开发效率. 使用yueueData开发中小型数据库应用具有很大的优势.

yueueData 具有哪些特点?

降低代码量,提升效率,易于开发
使用yueueData将使手写代码量降低至原先的30%或更多 . yueueData 尽量在不有损功能的前提下缩减代码书写量,通常您只需要一句代码就可以完成大多数数据库操作任务,无形中大大降低开发难度,提升开发效率.
多数据库同时操作
yueueData 支持N个数据库同时操作,可随意在多个数据库之间执行任务且无须多余代码!并可保证打开的数据库连接如数关闭.从此告别 DBProvider , GetConnection() , Close()
Access/SQL 零代码互转,便于迁移
使用yueueData 构建的数据库应用程序,可以方便在Access和SQL数据库之间迁移.并且无须更改一行代码!从此转型不再困难.
支持 C/S , B/S 通用性强
yueueData 在Windows Application 应用程序 和 ASP.NET WebSite 应用程序中均可使用!
防注入功能,增强安全性
具有参数过滤功能(可关闭),对字符参数进行过滤,并支持自定义过滤条件,弹指之间,消灭安全隐患!
封装功能不缺失
支持SQL储存过程 Access伪储存过程
支持任意数量任意格式的参数
支持SQL OUTPUT RETURN 参数
支持DataReader
支持统计
免费使用,开放源代码
yueueData 属于开源组件,任何人都可以免费使用yueueData并且参与到yueueData的开发中来.
我还不会使用yueueData 怎么办?
请您参见http://data.yueue.cn 内的图文教程和视频教程.

怎样获得yueueData ?
参见 http://data.yueue.cn 发布的最新版本和动态.
yueueData 1.01 测试版本已经提供下载,欢迎测试!

如何参与到 yueueData 开源项目中来?
yueueData 目前处于测试期,持续发布最新的版本.
您可以先下载yueueData的最新测试版本使用,测试,并期待您的建议.
当yueueData 测试成熟,发布正式版本后,进行测试并提供建议的朋友将会第一时间获得源代码.
期待您的加入!
联系方式见 yueue.cn 公告区

[解决办法]
呵呵。确实,我那个只是从1.1里改过来的。也刚刚转到2.0来。陪你等,看看2.0有什么优越性能可以利用。
[解决办法]
看这个 好用
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;
using System.Collections;


/// <summary>
/// myProjectDB 的摘要说明
/// </summary>
public class myProjectDB
{
//定义2个私有变量 用于存储
private string strConString = " ";
private SqlConnection SqlCon = null;
private SqlCommand cmd = null;
private SqlDataAdapter SqlDA = null;

public myProjectDB()
{
//
// TODO: 在此处添加构造函数逻辑
//
strConString = "database = myDB;user id=sa;pwd=sa;server=. ";


SqlCon = new SqlConnection(strConString);
SqlCon.Open();
}
//关闭连接
public void CloseConnection()
{
if (SqlCon != null)
{
SqlCon.Close();
}
}
//查询方法,要求参数:DataSet,表名,SQL语句
public bool queryClass(DataSet objDataSet, string TableName, string sql)
{
try
{
SqlDA = new SqlDataAdapter(sql, SqlCon);
SqlDA.Fill(objDataSet, TableName);
return true;
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
return false;
}
}
//更新方法,要求参数:SQL语句
public bool updateClass(string strSQL)
{
try
{
cmd = new SqlCommand(strSQL, SqlCon);
cmd.ExecuteNonQuery();
return true;
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
return false;
}
}

}
直接粘上就o了
[解决办法]
可以看我的博客 jyk.cnblogs.com 。

另外 ado.net 2.0 使用了基类 System.Data.Command.DbConnection 这一类的。建议参考使用。
[解决办法]
mark
[解决办法]
Enterprise Library3.0看看这个
[解决办法]
petshop 的sqlhelper
[解决办法]
我也很需要....
[解决办法]
这是我自编的,一直在用它,当然可能多了点去了


//DBExec.cs
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Text;

using System.Configuration;

public class DBExec
{
private static String connStr = ConfigurationManager.ConnectionStrings[ "keke100ConnectionString "].ConnectionString;

public static void ExecNonQuery(string sql)
{
SqlConnection conn = new SqlConnection(connStr);
conn.Open();
SqlCommand sc = new SqlCommand(sql, conn);
sc.ExecuteNonQuery();
conn.Close();
}
public static void ExecParamQuery(string sql, List <SqlParameter> sp)
{
SqlConnection conn = new SqlConnection(connStr);
SqlCommand sc = new SqlCommand(sql, conn);
sc.CommandType = CommandType.Text;
foreach (SqlParameter s in sp)
{
sc.Parameters.Add(s);
}
conn.Open();
sc.ExecuteNonQuery();
}

public static void ExecNonQuery(string sql, List <SqlParameter> sp)
{
SqlConnection conn = new SqlConnection(connStr);
SqlCommand sc = new SqlCommand(sql, conn);
sc.CommandType = CommandType.StoredProcedure;
foreach (SqlParameter s in sp)
{
sc.Parameters.Add(s);
}
conn.Open();
sc.ExecuteNonQuery();
}

public static int ExecGetInt(string sql, List <SqlParameter> sp)
{
int i = 0;
SqlConnection conn = new SqlConnection(connStr);
SqlCommand sc = new SqlCommand(sql, conn);
sc.CommandType = CommandType.StoredProcedure;
foreach (SqlParameter s in sp)


{
sc.Parameters.Add(s);
}
conn.Open();
SqlDataReader sdr = sc.ExecuteReader();
if (sdr.Read())
i = Convert.ToInt32(sdr[0]);
conn.Close();
return i;
}

//得到单一值的sql语句
public static int ExecGetInt(String sql)
{
int i = 0;
SqlConnection conn = new SqlConnection(connStr);
SqlCommand sc = new SqlCommand(sql, conn);
conn.Open();
SqlDataReader sdr = sc.ExecuteReader();
if (sdr.Read() && sdr[0] != DBNull.Value)
i = Convert.ToInt32(sdr[0]);
conn.Close();
return i;
}

public static object ExecGetObject(String sql)
{
object o = 0;
SqlConnection conn = new SqlConnection(connStr);
SqlCommand sc = new SqlCommand(sql, conn);
conn.Open();
SqlDataReader sdr = sc.ExecuteReader();
if (sdr.Read())
o = sdr[0];
conn.Close();
return o;
}

public static DataTable ExecDataTable(string sql)
{
SqlConnection conn = new SqlConnection(connStr);
DataSet ds = new DataSet();
SqlDataAdapter sda = new SqlDataAdapter(sql, conn);
sda.Fill(ds, "MyTable ");
conn.Close();
return ds.Tables[0];
}

public static DataSet ExecDataSet(string sql)
{
SqlConnection conn = new SqlConnection(connStr);
DataSet ds = new DataSet();
SqlDataAdapter sda = new SqlDataAdapter(sql, conn);
sda.Fill(ds, "MyTable ");
conn.Close();
return ds;
}
}

[解决办法]
希望对你有帮助

using System;
using System.Data;
using System.Data.SqlClient;// 封装SQL Sevrer 的访问方法的命名空间

namespace MyADO
{
/// <summary>
/// 实现SQL Server数据库操作 的摘要说明。
/// </summary>
internal class SqlDBOperator : DBOperator
{
/// <summary>
/// 数据库连接
/// </summary>
private SqlConnection _conn;
/// <summary>
/// 事务处理类
/// </summary>
private SqlTransaction _trans;
/// <summary>
/// 获取当前是否处于事务处理中,默认值false
/// </summary>
private bool isTransaction = false;

public SqlDBOperator(string strConnection)
{
//
// TODO: 在此处添加构造函数逻辑
//
this._conn = new SqlConnection(strConnection);
}

/// <summary>
/// 获取当前SQL Server连接
/// </summary>
public override IDbConnection Connection
{
get
{
return this._conn;
}
}


/// <summary>
/// 打开SQL Server连接
/// </summary>
public override void Open()
{
if (_conn.State != ConnectionState.Open)
{
try
{
_conn.Open();
}
catch
{
}
}
}

/// <summary>
/// 关闭SQL Server连接
/// </summary>
public override void Close()
{
if (_conn.State == ConnectionState.Open)
{
try
{
_conn.Close();
}
catch
{
}
}
}

/// <summary>
/// 开始一个SQL Server事务
/// </summary>
public override void BeginTrans()


{
if (_conn.State != ConnectionState.Open)
this.Open();
_trans = _conn.BeginTransaction();
isTransaction = true;
}

/// <summary>
/// 提交一个SQL Server事务
/// </summary>
public override void CommitTrans()
{
if (_conn.State != ConnectionState.Open)
this.Open();
if (isTransaction)
_trans.Commit();
isTransaction = false;
this.Close();
}

/// <summary>
/// 回滚一个SQL Server事务
/// </summary>
public override void RollbackTrans()
{
if (isTransaction)
_trans.Rollback();
isTransaction = false;
this.Close();
}

/// <summary>
/// 执行一个SQL语句(UPDATE,INSERT)
/// </summary>
/// <param name= "sql "> SQL语句 </param>
public override int ExeSql(string sql)
{
int v_ResultCount = -1;

// 打开
this.Open();

SqlCommand cmd = new SqlCommand();
cmd.Connection = this._conn;
if (isTransaction == true)
{
cmd.Transaction = this._trans;
}
cmd.CommandText = sql;
try
{
v_ResultCount = cmd.ExecuteNonQuery();
}
catch
{
}

// 释放
if (!isTransaction)
this.Close();

return v_ResultCount;
}

/// <summary>
/// 执行一个SQL语句(INSERT)返回当前ID
/// </summary>
/// <param name= "sql "> SQL语句 </param>
/// <param name= "a "> 临时变量 </param>
/// <returns> 当前ID </returns>
public override int ExeSql(string sql, int a)
{
int identity = -1;

// 打开
this.Open();

SqlCommand cmd = new SqlCommand();
cmd.Connection = this._conn;
if (isTransaction == true)
{
cmd.Transaction = this._trans;
}
cmd.CommandText = sql + " select @@identity as 'identity ' ";
try
{
// 第一行第一列的值为当前ID
SqlDataReader dr = cmd.ExecuteReader();

if (dr.Read())
{
identity = int.Parse(dr[0].ToString());
}

dr.Close();
}
catch
{
}

// 释放
if (!isTransaction)
this.Close();

return identity;
}

/// <summary>
/// 执行SQL语句返回第一行第一列的值
/// </summary>
/// <param name= "sql "> SQL语句 </param>
/// <returns> 第一行第一列的值 </returns>
public override string ExeSqlScalar(string sql)
{
string vResult = string.Empty;

this.Open();
DataTable dt = null;
try
{
dt = this.GetDataTable( sql);
if (dt.Rows.Count > 0)
{
string v_Value = dt.Rows[0][0].ToString();
dt.Dispose();
vResult = v_Value;
}
}
catch
{
}

this.Close();
return vResult;
}


/// <summary>
/// 获取DataSet
/// </summary>
/// <param name= "sql "> SQL语句 </param>
/// <returns> DataSet </returns>
public override DataSet GetDataSet(string sql)
{
// 打开
this.Open();

SqlCommand cmd = new SqlCommand();
cmd.Connection = this._conn;
if (isTransaction == true)
{
cmd.Transaction = this._trans;
}
DataSet ds = new DataSet();


SqlDataAdapter da = new SqlDataAdapter();
cmd.CommandText = sql;
da.SelectCommand = cmd;
try
{
da.Fill(ds);
}
catch
{
}

// 释放
if (!isTransaction)
this.Close();

return ds;
}

/// <summary>
/// 获取DataTable
/// </summary>
/// <param name= "sql "> SQL语句 </param>
/// <returns> DataTable </returns>
public override DataTable GetDataTable(string sql)
{
DataSet ds = this.GetDataSet(sql);
if (ds.Tables.Count > 0)
return ds.Tables[0];
else
return (new DataTable());
}

/// <summary>
/// 执行存储过程
/// </summary>
/// <param name= "p_ProcedureName "> 存储过程名 </param>
/// <param name= "p_SqlParameterArray "> 存储过程参数 </param>
public override int ExeProcedure(string p_ProcedureName, IDataParameter[] p_SqlParameterArray)
{
int vResult = -1;

// 打开
this.Open();
SqlCommand cmd = new SqlCommand();
cmd.CommandText = p_ProcedureName;
cmd.Connection = this._conn;
cmd.CommandType = CommandType.StoredProcedure;
if (p_SqlParameterArray != null)
{
foreach (SqlParameter Sq in p_SqlParameterArray)
{
cmd.Parameters.Add( Sq);
}
}

try
{
vResult = cmd.ExecuteNonQuery();
}
catch
{
}
// 释放
if (!isTransaction)
this.Close();

return vResult;
}

/// <summary>
/// 执行存储过程获取数据集
/// </summary>
/// <param name= "p_ProcedureName "> 存储过程名 </param>
/// <param name= "p_SqlParameterArray "> 存储过程参数 </param>
/// <param name= "p_TableIndex "> DataTable 的 Index </param>
/// <returns> DataTable </returns>
public override DataTable ExeProcedureGetRecords(string p_ProcedureName, IDataParameter[] p_SqlParameterArray, int p_TableIndex)
{
DataSet ds = ExeProcedureGetRecords(p_ProcedureName, p_SqlParameterArray);
if (ds.Tables.Count > 0 && p_TableIndex > = 0)
return ds.Tables[p_TableIndex];
else
return (new DataTable());
}

/// <summary>
/// 执行存储过程获取数据集
/// </summary>
/// <param name= "p_ProcedureName "> 存储过程名 </param>
/// <param name= "p_SqlParameterArray "> 存储过程参数 </param>
/// <returns> DataSet </returns>
public override DataSet ExeProcedureGetRecords(string p_ProcedureName, IDataParameter[] p_SqlParameterArray)
{
this.Open();
DataSet ds = new DataSet();
SqlDataAdapter da = new SqlDataAdapter(p_ProcedureName, this._conn);
da.SelectCommand.CommandType = CommandType.StoredProcedure;
if (p_SqlParameterArray != null)
{
foreach(SqlParameter Sq in p_SqlParameterArray)
{
da.SelectCommand.Parameters.Add( Sq);
}
}
da.Fill(ds);
this.Close();
return ds;
}

}
}

[解决办法]
我觉得一般的数据库操作已经够简单了,不用什么复杂的Helper。如果要方便点的话直接使用ORM
[解决办法]
就是 我觉得也没必要封装那么多,想封装,干脆把业务层也封装起来,数据层 业务层 表现层就完整了 哈
------解决方案--------------------


我怎么没有用呢? 你看基类部分。

2.0的特性就是基类 ,System.Data.Command 里面的 DbConnection DbCommand DbDataReader 等

这些就是最显著的特性,ADO.net 1.0 不是这样的,使用的是接口。

我的数据访问 的 函数名称,参数名称都是没有变化的,因为要向下兼容。

升级到了2.0,以前的项目也不能有太大的改动呀。
[解决办法]
加入 ASP。NET C#群吧 群号:1873156
[解决办法]
关注
[解决办法]
用不用特性是隐藏在内部的,就是说要封装起来。

在外部是应该看不出来变化的,因为要向下兼容,要保持函数名,参数不变,这些都不变了,外部也就体现不出来变化了。


[解决办法]
mark
[解决办法]
我一个都是orm
[解决办法]
SqlHelper微软提供的,极力推荐
[解决办法]
使用微软的那个EnterpriseLibrary不就OK了吗,是吧?
[解决办法]
sunzhong2003() SqlHelper封装太少 , 操作SQL还需要封装什么,已经足够用了
[解决办法]
http://blog.csdn.net/veryhappy/archive/2005/07/27/435821.aspx
[解决办法]
IBatisNet就可以了
或者
www.cnblogs.com/mail-ricklee中的修改的IBatisNet,可以直接返回DataSet,DataTable
[解决办法]
help push.
[解决办法]
Enterprise Library
[解决办法]
SQLHELP 类 那个很好用的,如果你要把你的邮件地址发给我,另外如果你需要的话我也可以把它的使用方法(实例)一起发与你!
由于上MSDN的频率不高,还是请你把邮件地址发到这里,我会及时发与你的!
(言出必行)
http://hi.baidu.com/happyf101

另外有其它朋友需要的,与可以与我联系!

读书人网 >asp.net

热点推荐