VS2010 winform程序连接ACCESS数据库问题 while(dr.Read())老是只循环一次就退出了

爱LOVE大葱 2011-10-30 12:42:11
public static List<MoeyInfo> ReturnListInCome()
{
string strSQL="select * from users";
connection.Open();
List<users> list = new List<users>();
users user=null;
OleDbCommand command = new OleDbCommand(strSQL, AccessHelper.connection);
OleDbDataReader dr = command.ExecuteReader();
try
{
while(dr.Read())
{
user= new users();
user.Id = Convert.ToInt16(dr["Id"].ToString());
user.Time = Convert.ToDateTime(dr["time"].ToString());
user.Remarks = dr["remarks"].ToString();
imi.UserRoleInfo = UserRoleInfoService.GetUserRoleById(Convert.ToInt16(dr["rid"].ToString()));
// UserRoleInfoService.GetUserRoleById中查询根据rid查询用户角色
//我调试进去GetUserRoleById这个方法,执行后dr关闭了
// 执行完这句话后再回来dr就不再循环了,难道这ACCESS数据库的 OleDbDataReader和SQL的reader不同?
list.Add(user);
}
}
catch(Exception e)
{}
finally
{
dr.Close();
if (connection.State == System.Data.ConnectionState.Open)
connection.Close();
}
return list;
...全文
471 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
private void Form1_Load(object sender, EventArgs e)
{//在文本控件中显示数据
t_nl.DataBindings.Add("Text", myDataSet, "_user._name");
//在下拉控件中显示数据
t_xb.DataSource = myDataSet;
t_xb.DisplayMember = "_user._name";
t_xb.ValueMember = "_user._name";

}

以上显示数据到控件说明连接数据库成功

至于查询的实现就是语句的问题了,最简单的就是一个文本控件和一个按钮控件,文本输入ID后点按钮执行查询语句,有时候连接不成功会造成不可理解的现象,哈哈......
丶云淡风轻丶 2011-11-03
  • 打赏
  • 举报
回复
imi.UserRoleInfo = UserRoleInfoService.GetUserRoleById(Convert.ToInt16(dr["rid"].ToString()));
这个只返回一个实体对象
string strSQL="select * from users";
这个查询是所有 实体的集合
  • 打赏
  • 举报
回复
public void GetConnected()//创建一个OleDbConnection
{
try
{

string strCon = " Provider = Microsoft.Jet.OLEDB.4.0 ; Data Source = user.mdb";
OleDbConnection myConn = new OleDbConnection(strCon);
string strCom = " SELECT * FROM _user ";

myDataSet = new DataSet();//创建一个DataSet
myConn.Open();

OleDbDataAdapter myCommand = new OleDbDataAdapter(strCom, myConn);//用OleDbDataAdapter 得到一个数据集

myCommand.Fill(myDataSet, "_user");//把Dataset 绑定_user 数据表

myConn.Close();//关闭此OleDbConnection

myBind = this.BindingContext[myDataSet, "_user"];

}
catch (Exception e)
{
MessageBox.Show("连接错误! " + e.ToString(), "错误");
}
}

以上是ACCESS数据库的连接代码
对于以Sql Server 2000 数据库为模型的程序代码,只要把*****.cs 中的数据链接代码修改一下即可,即把:
string myConn1 = " Provider = Microsoft.Jet.OLEDB.4.0 ; Data Source = db.mdb" ;
改换成:string strCon = "Provider = SQLOLEDB.1 ; Persist Security Info = False ; User ID = sa ; Initial
Catalog = data1 ; Data Source = server1 " ;
注释:此数据链接代表的意思是:打开Sql server 数据库,服务器名称为server1,数据库
为data1
爱LOVE大葱 2011-11-03
  • 打赏
  • 举报
回复
GetUserRoleById是关闭了连接和dr,我连接SQL就没有问题,连这个就不同了吧?
lvfeng19806001 2011-11-02
  • 打赏
  • 举报
回复
你GetUserRoleById方法中的连接对象connection是否和本方法的connection是同一个对象,你执行GetUserRoleById时是否把连接给关了?
如果是,连接对象不要共用,最多连接字符串共用就行了!
小志 2011-11-02
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 lwtops 的回复:]

兄弟,请问你是怎么跟access2010连接成功的?我无论怎么折腾就是“未在本地计算机上注册Microsoft.ACE.OLEDB.12.0程序”。
[/Quote]
缺少数据访问组件,到微软的网站上下载AccessDatabaseEngine后安装就可以了。

users表是不是就只有一条数据,或连接已经关闭,或dr已经被你Close()了。
快溜 2011-11-02
  • 打赏
  • 举报
回复
GetUserRoleById方法里是否关闭连接了
lwtops 2011-11-02
  • 打赏
  • 举报
回复
兄弟,请问你是怎么跟access2010连接成功的?我无论怎么折腾就是“未在本地计算机上注册Microsoft.ACE.OLEDB.12.0程序”。

111,098

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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