小弟刚刚写的数据库操作类,有不足之处请大家多多提意见

海蓝树 2010-10-14 01:56:06

兄弟刚刚写了数据库操作类,请大家提提意见


public static string getconnstr()
{
string connstr = DBstr.getconnstr("MSSQL");
return connstr;
}
/// <summary>
/// 添加
/// </summary>
/// <param name="entity">对象</param>
/// <returns></returns>

public static int Insert(T entity,string sqltext)
{
SqlParameter[] p =DictionarytoArry(Entitylist(entity)) ;
if (p.Length>0)
{
p[0].Direction = ParameterDirection.Output;
SqlHelper.ExecuteNonQuery(getconnstr(), CommandType.StoredProcedure, sqltext, p);
p = null;
return Convert.ToInt32(p[0].Value);
}
return 0;
}
/// <summary>
/// 修改
/// </summary>
/// <param name="entity">对象</param>
/// <returns></returns>

public static int Update(T entity,string sqltext)
{
SqlParameter[] p = DictionarytoArry(Entitylist(entity));
if (p.Length>0)
{
int i = SqlHelper.ExecuteNonQuery(getconnstr(), CommandType.StoredProcedure, sqltext, p);
p = null;
return i;
}
return 0;
}


/// <summary>
///查询实例
/// </summary>
/// <param name="entity">对象</param>
/// <returns></returns>
public static T Select(T entity, string sqltext)
{
if (entity!=null)
{
if (!string.IsNullOrEmpty(sqltext))
{

SqlParameter[] p = DictionarytoArry(Entitylist(entity));
using (IDataReader dr = SqlHelper.ExecuteReader(getconnstr(), CommandType.StoredProcedure, sqltext, p))
{
while (dr.Read())
{
entity= Select(dr,ref entity);
}
}
p = null;
return entity;
}
}
return default(T);
}

/// <summary>
/// 获取查询集合
/// </summary>
/// <param name="indexpage"></param>
/// <param name="pagesize"></param>
/// <param name="mis"></param>
/// <param name="recordCount"></param>
/// <returns></returns>
public static IList<T> Select(int indexpage, int pagesize,string sqltext, T entity, out int recordCount)
{
if (entity!=null)
{
if (!string.IsNullOrEmpty(sqltext))
{
Dictionary<string,string> dlist = Entitylist(entity);
//增加一个记录记录集总数字段
dlist.Add("recordCount", "0");
SqlParameter[] p = DictionarytoArry(dlist);
p[p.Length-1].Direction=ParameterDirection.Output;
IList<T> list = new List<T>();
using(IDataReader dr=SqlHelper.ExecuteReader(getconnstr(),CommandType.StoredProcedure,sqltext,p))
{
while (dr.Read())
{
list.Add(Select(dr,ref entity));
}
}

recordCount = Convert.ToInt32(p[p.Length-1].Value);
p = null;
return list;
}
}

recordCount = 0;
return null;
}
public static T Select(IDataReader dr, ref T entity)
{
if (dr!=null)
{
Type type = typeof(T);
PropertyInfo[] propertyInfos = type.GetProperties();
//创建PropertyInfo类型变量,获取实例化类的各个属性
for (int i = 0; i < dr.FieldCount; i++)
{
for (int j = 0; j < propertyInfos.Length; j++)
{
PropertyInfo propertyInfo = propertyInfos[j];

if (dr.GetName(i).Trim().ToLower() == propertyInfo.Name.Trim().ToLower())
//实例化类的各个属性与具体的DateReader中的对象名称变为小写字母后进行比较
{
Type propertyType = propertyInfo.PropertyType;
if (propertyType.IsValueType || (propertyType.IsClass && propertyType.IsSerializable && propertyType.IsSealed))
{
object val = dr[propertyInfo.Name];
if (val != DBNull.Value)
{
propertyInfo.SetValue(entity, val, null);
}
break;
}
}
}
}

propertyInfos = null;
return entity;
}
return default(T);
}

public static void parlist(string sqltext, ref Dictionary<string, object> strarr)
{

if (strarr.Count>0 && (!string.IsNullOrEmpty(sqltext)))
{
SqlParameter[] sp = new SqlParameter[strarr.Count];
int i = 0;
foreach (KeyValuePair<string,object> k in strarr)
{
if (k.Value.Equals(""))
{
sp[i] = new SqlParameter("@" + k.Key, k.Value);
}
else
{
sp[i].Direction = ParameterDirection.Output;

}
i++;
}

int t=SqlHelper.ExecuteNonQuery(getconnstr(), CommandType.StoredProcedure, sqltext, sp);

if (t > 0)
{
int j = 0; string spstr;
foreach (KeyValuePair<string,object> k in strarr)
{
if (k.Value.Equals(""))
{
spstr = sp[j].ParameterName.ToString().Replace("@", "");
if (k.Key == spstr)
{
strarr[k.Key] = sp[j];
}
}

j++;
}
}
}
}
...全文
352 31 打赏 收藏 转发到动态 举报
写回复
用AI写文章
31 条回复
切换为时间正序
请发表友善的回复…
发表回复
海蓝树 2010-10-20
  • 打赏
  • 举报
回复
最后一次顶贴
l274747948 2010-10-15
  • 打赏
  • 举报
回复
小弟,为什么要自己写呢,去网上下一个代码生成器~~~~~
BIRD72sky 2010-10-15
  • 打赏
  • 举报
回复
很久没写过了,都用生成器了,呵呵
Adechen 2010-10-15
  • 打赏
  • 举报
回复
虽然没有其他的sqlhelper类强大,但也是适用的,支持
海蓝树 2010-10-15
  • 打赏
  • 举报
回复
如果是那样的话,还不如直接使用动软呢
threenewbee 2010-10-15
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 xwnxwn 的回复:]
引用 17 楼 caozhy 的回复:
引用 7 楼 xwnxwn 的回复:
Entity Framework,曾经考虑过但是不是很好用,尤其一些特殊的存储过程经常出现问题,而且最让我头疼的就它的重建,每次修改的内容都会把覆盖掉

那不是 EF 的问题,你可以使用自定义代码生成器代替默认的,就不会被覆盖了。

现在主流的orm框架基本都是具有代码生成器的作用,呵呵
[/Quote]
我是说,你可以自己写一个代码生成器代替Visual Studio默认的那个。
海蓝树 2010-10-15
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 caozhy 的回复:]
引用 7 楼 xwnxwn 的回复:
Entity Framework,曾经考虑过但是不是很好用,尤其一些特殊的存储过程经常出现问题,而且最让我头疼的就它的重建,每次修改的内容都会把覆盖掉

那不是 EF 的问题,你可以使用自定义代码生成器代替默认的,就不会被覆盖了。
[/Quote]
现在主流的orm框架基本都是具有代码生成器的作用,呵呵
海蓝树 2010-10-15
  • 打赏
  • 举报
回复
反射对性能的影响主要在 Assembly的加载和invoke对方法的引用上,其他的应该消耗资源很少
海蓝树 2010-10-15
  • 打赏
  • 举报
回复
反射的性能问题,注意是消耗在 Assembly的加载上,和invoke的引用上,我的类没有涉及到,性能应该不会有太多降低
Dic4000 2010-10-15
  • 打赏
  • 举报
回复
用反射是会有性能问题的,在频率使用很高的方法中,最好避免用反射.
wfghdc 2010-10-15
  • 打赏
  • 举报
回复
[Quote=引用 26 楼 l274747948 的回复:]
小弟,为什么要自己写呢,去网上下一个代码生成器~~~~~
[/Quote]
你或许可以找到一个三层,或者生成DAL之类的东西,但是这样你能找到吗
wwfgu00ing 2010-10-14
  • 打赏
  • 举报
回复
sqlHelp类就不错
China_yuanli 2010-10-14
  • 打赏
  • 举报
回复
兄弟,不要那么麻烦,直接用代码生成器。
threenewbee 2010-10-14
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 xwnxwn 的回复:]
Entity Framework,曾经考虑过但是不是很好用,尤其一些特殊的存储过程经常出现问题,而且最让我头疼的就它的重建,每次修改的内容都会把覆盖掉
[/Quote]
那不是 EF 的问题,你可以使用自定义代码生成器代替默认的,就不会被覆盖了。
jiankeqcaf 2010-10-14
  • 打赏
  • 举报
回复
来看看
guyehanxinlei 2010-10-14
  • 打赏
  • 举报
回复
Microsoft patterns & practices Enterprice Library
v风雪山神庙v 2010-10-14
  • 打赏
  • 举报
回复
我一直在用SqlHelper,或者自己写DataAccess
bluedoctor 2010-10-14
  • 打赏
  • 举报
回复
原来是一个ORM操作类啊,推荐一个不用反射的ORM,PDF.NET数据开发框架:
http://www.pwmis.com/sqlmap
海蓝树 2010-10-14
  • 打赏
  • 举报
回复
微软的sqlhelper,有什么缺点吗
我看你有戏 2010-10-14
  • 打赏
  • 举报
回复
用微软的sqlhelper啊
加载更多回复(10)

62,016

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧