DBHelper类及数据库连接问题?

jdazui 2011-03-14 01:32:01

using System;
using System.Collections.Generic;
using System.Text;
using System.Data.SqlClient;
using System.Data;
using System.Reflection;
using System.Configuration;
using Cp.Processing;
namespace Cp.DAL
{
/// <summary>
/// DBhelper 类
/// </summary>
public class DBHelper
{
public static string connString = ConfigurationManager.ConnectionStrings["DBConnectionString"].ConnectionString;

///// <summary>
///// 工具生成的
///// </summary>
///// <returns></returns>
//public static SqlConnection CreateConn()
//{
// return new SqlConnection(connString);
//}

/// <summary>
/// 打开数据库连接
/// </summary>
/// <param name="conn"></param>
public static void OpenConn(SqlConnection conn)
{
if (conn != null)
{
if (conn.State == ConnectionState.Closed)
{
conn.Open();
}
}
}

/// <summary>
/// 关闭数据库连接
/// </summary>
/// <param name="conn"></param>
public static void CloseConn(SqlConnection conn)
{
if (conn != null)
{
if (conn.State == ConnectionState.Open)
{
conn.Close();
}
}

}
private static SqlConnection connection;
/// <summary>
/// 获取数据库连接(Connection)
/// </summary>
public static SqlConnection Connection
{
get
{
string connectionString = connString;
if (connection == null)
{
connection = new SqlConnection(connectionString);
connection.Open();
}
else if (connection.State == System.Data.ConnectionState.Closed)
{
connection.Open();
}
else if (connection.State == System.Data.ConnectionState.Broken)
{
connection.Close();
connection.Open();
}
return connection;
}
}
/// <summary>
/// 执行 T-SQL 语句,并返回所受影响的行数-----AAA
/// </summary>
/// <param name="safeSql">Sql语句</param>
/// <returns>返回受影响的行数</returns>
public static int ExecuteCommand(string safeSql)
{

SqlConnection conn = Connection;
try
{
SqlCommand cmd = new SqlCommand(safeSql, conn);
//等待时间
cmd.CommandTimeout = 30;
int num = cmd.ExecuteNonQuery();
CloseConn(conn); //关闭数据库连接
return num;
}
catch (Exception e)
{
CloseConn(conn);
return 0;
}
}
/// <summary>
/// 返回 SqlDataReader 的对象
/// </summary>
/// <param name="safeSql"></param>
/// <returns></returns>
public static SqlDataReader ExecuteReader(string safeSql)
{
SqlConnection conn = Connection;
try
{
SqlCommand cmd = new SqlCommand(safeSql.Trim(), conn);
//等待时间
cmd.CommandTimeout = 30;
SqlDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
return reader;
}
catch (Exception e)
{
CloseConn(conn);
return null;
}
}
/// <summary>
/// 增删改
/// </summary>
/// <param name="cmdText"></param>
/// <param name="paramers"></param>
/// <returns></returns>
public static Object Execute(string cmdText, params SqlParameter[] paramers)
{
SqlConnection conn = Connection;
try
{
SqlCommand cmd = CreateCMD(cmdText, paramers, conn);
//等待时间
cmd.CommandTimeout = 30;
int num = cmd.ExecuteNonQuery();
CloseConn(conn); //关闭数据库连接
return num;
}
catch (Exception e)
{
CloseConn(conn);
return 0;
}
}
/// <summary>
/// 查询 的sql 或者 存储过程
/// </summary>
/// <param name="cmdText"></param>
/// <param name="paramers"></param>
/// <returns></returns>
public static Object M_Execute(string cmdText, params SqlParameter[] paramers)
{
SqlConnection conn = Connection;
try
{
SqlCommand cmd = CreateCMD(cmdText, paramers, conn);
//等待时间
cmd.CommandTimeout = 30;
return cmd.ExecuteReader(CommandBehavior.CloseConnection);
}
catch (Exception e)
{
CloseConn(conn);
return new object();
}

}
//上面的调用
private static SqlCommand CreateCMD(string cmdText, SqlParameter[] paramers, SqlConnection conn)
{
SqlCommand cmd = new SqlCommand(cmdText, conn);
if (paramers != null)
cmd.Parameters.AddRange(paramers);
OpenConn(conn);
return cmd;
}
}
}




读取时候调用如下:

using (SqlDataReader sdr = (SqlDataReader)DBHelper.M_Execute(cmdText))
{
while (sdr.Read())
{
UserType userType = new UserType();
userType.id = (Convert.ToInt32(sdr[0]));
userType.name = (Convert.ToString(sdr[1]));
userTypes.Add(userType);
........
}
sdr.Dispose();
}



有时候根据用户Id,用户信息 明明存在,确查询不出数据。 (数据库不在本地
...全文
322 19 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
还正确啦,你把对象放到集合当中,如果想读取显示出来,那必须把这个集合给返回啊,不然,怎么可能显示出来呢!
jdazui 2011-03-14
  • 打赏
  • 举报
回复
public static IList<UserInfo> M_SelectUserInfoByCmdText(String cmdText)
{
IList<UserInfo> userInfos = new List<UserInfo>();
using (SqlDataReader sdr = DBHelper.ExecuteReader(cmdText))
{
while (sdr.Read())
{
UserInfo userInfo = new UserInfo();
userInfo.ID = (Convert.ToInt32(sdr[0]));
userInfo.LoginName = (Convert.ToString(sdr[1]));
userInfo.LoginPwd = (Convert.ToString(sdr[2]));
.....
}
sdr.Dispose();
}
return userInfos;
}
jdazui 2011-03-14
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 dingzongyinnihao 的回复:]
你是用Ilist来查的吧

那你代码应该这样写哎


C# code

public static Ilist<UserType> getAll()
{
Ilist<UserType> userTypes =new List<UserType>();
string cmdTest="";
using (SqlDataReader sdr = (SqlDataReader)DB……
[/Quote]

能解释下为什么吗?
  • 打赏
  • 举报
回复
哈哈,你没return 把,呵呵,问题出来了吧!
  • 打赏
  • 举报
回复
你是用Ilist来查的吧

那你代码应该这样写哎


public static Ilist<UserType> getAll()
{
Ilist<UserType> userTypes =new List<UserType>();
string cmdTest="";
using (SqlDataReader sdr = (SqlDataReader)DBHelper.M_Execute(cmdText))
{
while (sdr.Read())
{
UserType userType = new UserType();
userType.id = (Convert.ToInt32(sdr[0]));
userType.name = (Convert.ToString(sdr[1]));
userTypes.Add(userType);

}
return userTypes;
sdr.Dispose();
}

}
jdazui 2011-03-14
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 alan_219_2008 的回复:]
断点看一下拼接的sql语句有没有语法问题
没有的话放到sql查询器内查一下是不是你想要的数据
[/Quote]
99% 的查询 都是通过的 一天也就出现 那么几次 本地根本就调试不出来的
alan_219_2008 2011-03-14
  • 打赏
  • 举报
回复
断点看一下拼接的sql语句有没有语法问题
没有的话放到sql查询器内查一下是不是你想要的数据
jdazui 2011-03-14
  • 打赏
  • 举报
回复
string cmdText = "SELECT UserInfo.id,UserInfo.LoginName,UserInfo.LoginPwd,UserInfo.TypeId,UserInfo.BankUserName,UserInfo.BankNum,UserInfo.QQ,UserInfo.PhoneNum";

cmdText += " FROM userinfo where UserInfo.id =" + Id;

jdazui 2011-03-14
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 wxr0323 的回复:]
引用 8 楼 jdazui 的回复:

引用 6 楼 wxr0323 的回复:
在Web.config节点<connectionStrings>中添加

XML code

<configuration>
<connectionStrings>
<add name="ConnectionServer" connectionString="Data Source=192.168.1……
[/Quote]

string cmdText = "SELECT UserInfo.id,UserInfo.LoginName,UserInfo.LoginPwd,UserInfo.TypeId,UserInfo.BankUserName,UserInfo.BankNum,UserInfo.QQ,UserInfo.PhoneNum";

cmdText += " FROM where UserInfo.id =" + Id;

子夜__ 2011-03-14
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 jdazui 的回复:]

引用 6 楼 wxr0323 的回复:
在Web.config节点<connectionStrings>中添加

XML code

<configuration>
<connectionStrings>
<add name="ConnectionServer" connectionString="Data Source=192.168.133.30(服务器地址);Initial ……
[/Quote]

cmdText咋写的。
jdazui 2011-03-14
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 airch 的回复:]
报异常没,sql发下
[/Quote]
报的 异常 未将对象引用到对象的实例。 也就是说没查询到数据。
jdazui 2011-03-14
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 wxr0323 的回复:]
在Web.config节点<connectionStrings>中添加

XML code

<configuration>
<connectionStrings>
<add name="ConnectionServer" connectionString="Data Source=192.168.133.30(服务器地址);Initial Catalog=Shu……
[/Quote]

这个 问题 只是 出现很少 一个和连接语句 无关
jdazui 2011-03-14
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 airch 的回复:]
引用 2 楼 jdazui 的回复:
来个人 吱一声吧! 谢谢

楼主,不带这样的,貌似我不是人哪......
[/Quote]
我说这句前,你刚好还没发....
子夜__ 2011-03-14
  • 打赏
  • 举报
回复
在Web.config节点<connectionStrings>中添加

<configuration>
<connectionStrings>
<add name="ConnectionServer" connectionString="Data Source=192.168.133.30(服务器地址);Initial Catalog=ShuiDian(数据库名称);Persist Security Info=True;User ID=sa(用户名);Password=(密码);"/>
</connectionStrings>
</configuration>


字符串要对 在查查你的参数ID正确不正确。
jdazui 2011-03-14
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 airch 的回复:]
报异常没,sql发下
[/Quote]
UserInfo userInfo = (UserInfo)Session["User"];
UserInfo userInfoTwo = UserInfoManager.M_SelectUserInfoById(userInfo.ID);
执行语句: SELECT * from userInfo wehre Id=1
但是有时候获取不到竟然数据,这条数据数据库中肯定存在的
Airch 2011-03-14
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 jdazui 的回复:]
来个人 吱一声吧! 谢谢
[/Quote]
楼主,不带这样的,貌似我不是人哪......
MSDNXGH 2011-03-14
  • 打赏
  • 举报
回复
是不是有些用户的查出来,有些没有查询出来昵,这个就是参数化参询的结果,你定义参数化查询时的类型不对,或者类型长度不对,有些用户ID长了,它自动给截了
jdazui 2011-03-14
  • 打赏
  • 举报
回复
来个人 吱一声吧! 谢谢
Airch 2011-03-14
  • 打赏
  • 举报
回复
报异常没,sql发下

62,244

社区成员

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

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

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

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