关于数据库连接的问题……

灰太狼已不再单身 2009-03-03 04:54:30
我以前用的是另外一个DBHelper类,前天自己写了一个类,但是为什么就一直读不出数据。。

我觉得是我的方法有错,大家帮我写一下 查询数据的方法,我来看看我错在哪里。

比如:string sql="."+"Northwind"+"sa"+"123456"; 写一个查询任意一张表数据的方法吧,多谢!


using System;
using System.Collections.Generic;
using System.Text;
using System.Data.SqlClient;
using System.Data;
using System.Configuration;

namespace ExeciseProject.DAL
{
public class DBHelper
{
private SqlConnection conn;
private SqlCommand cmd;
private SqlDataAdapter da;
private DataSet ds;

private string myServer;
private string myDatabase;
private string myUid;
private string myPwd;
private string myStrConn;


public DBHelper(string server, string database, string uid, string pwd)
{
//获取连接数据库语句的各个属性的值
this.myServer = server;
this.myDatabase = database;
this.myUid = uid;
this.myPwd = pwd;
try
{
conn = new SqlConnection(getStrConn());

}
catch
{
return null;
}

}

#region 封装连接数据库语句的属性

public string MyServer
{
//服务器地址
get { return myServer; }
set { myServer = value; }
}

public string MyDatabase
{
//数据库
get { return myDatabase; }
set { myDatabase = value; }
}

public string MyUid
{
//用户名
get { return myUid; }
set { myUid = value; }
}

public string MyPwd
{
// 密码
get { return myPwd; }
set { myPwd = value; }
}
#endregion

#region 组合数据库连接语句
private string getStrConn()
{
//组合连接数据库语句
try
{
connOpen();
myStrConn = "server=" + MyServer + ";database=" + MyDatabase + ";uid=" + MyUid + ";pwd=" + MyPwd;
connClose();
}
catch
{
return null;
}

return myStrConn;
}
#endregion

#region 打开数据库

private bool connOpen()
{
try
{
if (conn.State == ConnectionState.Closed)
{
conn.Open();
}
}
catch
{
return false;
}

return true;

}
#endregion

#region 关闭数据库

private bool connClose()
{
try
{
if(conn.State == ConnectionState.Open)
{
conn.Close();
}
}
catch
{
return false;
}

return true;
}
#endregion

#region 读取数据

public DataSet getDs(string strSelect,string tempTable)
{
// 读取数据库数据
try
{
da=new SqlDataAdapter(strSelect,conn);
ds = new DataSet();
da.Fill(ds,tempTable);
conn.Close;
}
catch
{
return null;
}

return ds.Tables[0];
}
#endregion

#region 写入数据

public bool setDb(string sql )
{
// 向数据库写入数据
try
{
if (conn.Open())
{
cmd = new SqlCommand(sql,conn);
da=cmd.ExecuteNonQuery();
connClose();
}
}
catch
{
return false;
}

return true;

}
#endregion
}

}

...全文
160 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
ding~
  • 打赏
  • 举报
回复
恩恩
wuyq11 2009-03-03
  • 打赏
  • 举报
回复
connOpen();
myStrConn = "server=" + MyServer + ";database=" + MyDatabase + ";uid=" + MyUid + ";pwd=" + MyPwd;
也可查询web.config,配置config文件,查询连接字符串。可参考petshop,dot bbs
greenery 2009-03-03
  • 打赏
  • 举报
回复
你可以参考微软的企业类库,那个数据库辅助类写的很好。

你的代码可以做以下优化
1 构造函数不能返回值
改为
public DBHelper(string server, string database, string uid, string pwd)
{
//获取连接数据库语句的各个属性的值
this.myServer = server;
this.myDatabase = database;
this.myUid = uid;
this.myPwd = pwd;
}

2 连接字符串没有准备好就进行数据库连接,一定失败
另外,getStrConn函数就做返回连接字符串,不要做其它
private string getStrConn()
{
//组合连接数据库语句
try
{
connOpen();
myStrConn = "server=" + MyServer + ";database=" + MyDatabase + ";uid=" + MyUid + ";pwd=" + MyPwd;
connClose();
}
catch
{
return null;
}

return myStrConn;
}
改为

private string getStrConn()
{
//组合连接数据库语句
myStrConn = "server=" + MyServer + ";database=" + MyDatabase + ";uid=" + MyUid + ";pwd=" + MyPwd;

return myStrConn;
}

3 打开连接时进行初始化
private bool connOpen()
{
try
{
if(null== conn)
conn=new SqlConnection(getStrConn());
if (conn.State == ConnectionState.Closed)
{
conn.Open();
}
}
catch
{
return false;
}

return true;

}

4 用完数据库连接后,要尽快关闭。
  • 打赏
  • 举报
回复
呵呵 你说的 我都记到的 现在笔记本上没安装软件 晚上我会去调试的
我姓区不姓区 2009-03-03
  • 打赏
  • 举报
回复
我把你的代码复制了下来,修改了我所说的那些问题以后可以查询出数据来
这也不是问题那也不是问题,还不肯调试,我无话可说了
  • 打赏
  • 举报
回复
构造函数的return是catch语句,那里问题不大,到时候我再改了就是,
我组合字符串那里是为了用来打开需要用的数据库的 那里没问题 只是把后面的关闭去了就可以了
你们看看其他地方有神门问题
我姓区不姓区 2009-03-03
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 lifueng 的回复:]
引用 7 楼 ojlovecd 的回复:
大概看了一下,没仔细看
getStrConn()这个方法是获取链接字符串的吧,不明白你先打开一次链接,又把它关闭是干什么用的


上面和下面的 都是 打开和关闭 数据库的 方法
[/Quote]
我要问的就是你要得到一个连接字符串,你打开连接作甚?
还有你的构造函数中能用return 的吗?
setDb方法中if(conn.Open())和da=cmd.ExecuteNonQuery();
能编译通过??
  • 打赏
  • 举报
回复
晕 我也看了 那个获取数据库连接语句那里

居然把数据库打开了又关了 好像那里有点问题
  • 打赏
  • 举报
回复
DBHelper db = new DBHelper(".", "Northeind", "sa", "123456");

这个就是连接数据库的 ,是通过构造函数传过去的
juzihong99 2009-03-03
  • 打赏
  • 举报
回复
没有连接数据库的字符串
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 ojlovecd 的回复:]
大概看了一下,没仔细看
getStrConn()这个方法是获取链接字符串的吧,不明白你先打开一次链接,又把它关闭是干什么用的
[/Quote]

上面和下面的 都是 打开和关闭 数据库的 方法
我姓区不姓区 2009-03-03
  • 打赏
  • 举报
回复
大概看了一下,没仔细看
getStrConn()这个方法是获取链接字符串的吧,不明白你先打开一次链接,又把它关闭是干什么用的
  • 打赏
  • 举报
回复

大家看看这个方法读取数据有没问题



using System;
using System.Collections.Generic;
using System.Text;
using System.Data.SqlClient;
using System.Data;

namespace ExeciseProject.DAL
{
public class TestService
{
/// <summary>
/// 查询数据库表的数据
/// </summary>
public DataTable getTable(int num)
{
//查询数据库表的数据
int i=10; // 控制每页显示数据的行数
DataTable dt;
try
{
DBHelper db = new DBHelper(".", "Northeind", "sa", "123456");
string sql = "select top " + i + " * from Products where ProductID not in (select top " + ((num - 1) * i) + " ProductID from Products)";
if (i <= 0)
{
i = 1;
}
dt = db.getDs(sql,"table1");
}
catch
{
return null;
}

return dt;
}
}
}

fangq 2009-03-03
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 lifueng 的回复:]
哈哈……
说实在的 ,我写程序从来没加断点调试过。
[/Quote]

  • 打赏
  • 举报
回复
哈哈……
说实在的 ,我写程序从来没加断点调试过。
  • 打赏
  • 举报
回复
我的读出数据和写出数据的方法对没??
我姓区不姓区 2009-03-03
  • 打赏
  • 举报
回复
那你也没加断点调试一下看看?
wanghao3616 2009-03-03
  • 打赏
  • 举报
回复
或者 自己创建sqldatasource 让程序自动生成
wanghao3616 2009-03-03
  • 打赏
  • 举报
回复
Data Source=server;Initial Catalog=db;User ID=test;Password=test;

62,268

社区成员

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

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

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

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