通过ADO.NET访问SqlServer数据库的通用类,你是如何设计的?
痛苦于ADO.NET更新数据库时的复杂(因为不用CommandBuilder)。
通过ADO.NET访问SqlServer数据库的通用类,你是如何设计的?为什么这么设计?有什么好处?
问题点数:100、回复次数:20Top
1 楼sjzwinfor(蜘蛛侠)回复于 2004-09-01 22:06:16 得分 0
用组件类,方便,简单Top
2 楼windinwing(潇笑)回复于 2004-09-01 22:13:40 得分 20
用存储过程啊,这个写起来方便
internal class WSqlCommand : IDisposable
{
private SqlCommand m_SqlCmd = null;
private string m_connStr = "";
/// <summary>
/// 默认构造方法.
/// </summary>
/// <param name="connectionString">连接字符串.</param>
/// <param name="commandText">命令文本.</param>
public WSqlCommand(string connectionString,string commandText)
{
m_connStr = connectionString;
m_SqlCmd = new SqlCommand(commandText);
m_SqlCmd.CommandType = CommandType.StoredProcedure;
m_SqlCmd.CommandTimeout = 180;
}
public WSqlCommand(string connectionString)
{
m_connStr = connectionString;
m_SqlCmd = new SqlCommand();
m_SqlCmd.CommandType = CommandType.Text;
m_SqlCmd.CommandTimeout = 180;
}
#region function Dispose
public void Dispose()
{
if(m_SqlCmd != null)
{
m_SqlCmd.Dispose();
}
}
#endregion
#region function AddParameter
/// <summary>
/// 添加SQL命令参数
/// </summary>
/// <param name="name">参数 名称.</param>
/// <param name="dbType">参数 MSSQL数据类型</param>
/// <param name="value">参数 值</param>
public void AddParameter(string name,SqlDbType dbType,object value)
{
SqlDbType dbTyp = dbType;
object val = value;
if(val is DateTime)
{
DateTime date = (DateTime)value;
val = new DateTime(date.Year,date.Month,date.Day,date.Hour,date.Minute,0,0);
}
if(dbType == SqlDbType.UniqueIdentifier)
{
dbTyp = SqlDbType.NVarChar;
string guid = val.ToString();
if(guid.Length < 1)
{
return;
}
}
m_SqlCmd.Parameters.Add(name,dbTyp).Value = val;
}
#endregion
#region fucntion Execute
/// <summary>
/// 执行命令.
/// </summary>
/// <returns>返回DataSet类型</returns>
public DataSet Execute()
{
DataSet dsRetVal = null;
using(SqlConnection con = new SqlConnection(m_connStr))
{
con.Open();
m_SqlCmd.Connection = con;
dsRetVal = new DataSet();
SqlDataAdapter adapter = new SqlDataAdapter(m_SqlCmd);
adapter.Fill(dsRetVal);
adapter.Dispose();
}
return dsRetVal;
}
public int ExecuteNonQuery()
{
int i=-1;
using(SqlConnection con = new SqlConnection(m_connStr))
{
con.Open();
m_SqlCmd.Connection = con;
i=m_SqlCmd.ExecuteNonQuery();
}
return i;
}
#endregion
#region Properties Implementaion
/// <summary>
/// 获取或设置命令超时时间.
/// </summary>
public int CommandTimeout
{
get{ return m_SqlCmd.CommandTimeout; }
set{ m_SqlCmd.CommandTimeout = value; }
}
/// <summary>
/// 获取或设置命令类型.
/// </summary>
public CommandType CommandType
{
get{ return m_SqlCmd.CommandType; }
set{ m_SqlCmd.CommandType = value; }
}
public string CommandText
{
get{return m_SqlCmd.CommandText;}
set{m_SqlCmd.CommandText=value; }
}
#endregion
}Top
3 楼lxcc()回复于 2004-09-01 22:14:38 得分 10
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnbda/html/daab-rm.aspTop
4 楼windinwing(潇笑)回复于 2004-09-01 22:15:58 得分 10
调用
public DataView GetUser(string Account)
{
using(WSqlCommand sqlCmd = new WSqlCommand(m_ConStr,"disku_GetUser"))
{
sqlCmd.AddParameter("@Account" ,SqlDbType.NVarChar,Account);
DataSet ds = sqlCmd.Execute();
ds.Tables[0].TableName = "User";
return ds.Tables["User"].DefaultView;
}
}
其实用法很多,这个是我常用的一个,调用方便,不用写一大堆参数
另外自动释放连接Top
5 楼lxcc()回复于 2004-09-01 22:16:20 得分 10
M$的Data Access Application Block for .NETTop
6 楼cnming(cnming)回复于 2004-09-01 22:16:50 得分 10
我做了通用类,但是没有用起来,因为我感觉不大适用Top
7 楼zhpsam109(JACKY.昊昊)回复于 2004-09-01 22:19:14 得分 0
顶!Top
8 楼vniper(爱国不爱党!)回复于 2004-09-06 23:09:40 得分 0
want moreTop
9 楼xiaopai20(小排——流浪狗)回复于 2004-09-06 23:33:17 得分 10
我用的也是这个
Data Access Application Block for .NET
Top
10 楼boyfling(GGS)回复于 2004-09-07 20:29:12 得分 0
这个是Data Access Application Block for .NET是什么哦?哪里找?Top
11 楼zl9732(zl9732)回复于 2004-09-17 00:08:05 得分 0
upTop
12 楼jeffandjeff(brood)回复于 2004-09-17 00:43:34 得分 0
上微软网站下载啊Top
13 楼fengqingyang1979(风轻扬)回复于 2004-09-17 08:41:04 得分 10
Data Access Application Block for .NET到Google搜也应该能找到吧Top
14 楼Edifier0709(腦袋重構中.....)回复于 2004-09-17 08:44:41 得分 0
You can use <<Data Access Application Block for .NET>>Top
15 楼xiangzionest(祥子)回复于 2004-09-17 08:45:08 得分 0
Data Access Application Block for .NET,你可以参考微软的,增加自己的一些东西Top
16 楼kuibobo(^踏雪无痕)回复于 2004-10-04 02:24:58 得分 0
能写的话自己弄一个,肯定学到不少东西Top
17 楼hivak47(比尔)回复于 2004-10-04 08:54:16 得分 10
我记得MSDN上面有,楼主可以找找看,好像是用存储过程来做的.Top
18 楼fengqingyang1979(风轻扬)回复于 2004-10-04 09:17:23 得分 0
研究一下微软的Data Access Application Block for .NET,然后参考做一个适合自己用的。Top
19 楼cgq214(cgq214)回复于 2004-10-04 15:09:03 得分 0
orm怎么不考虑呢,开源的有nhibernate呢Top
20 楼veijerd(玮杰)回复于 2004-11-01 15:38:31 得分 10
Data Access Application Block for .NETTop




