oledbdataadapter fill() 问题

neeka 2012-09-04 12:45:54
各位大侠,我用oledbdataadapter的fill方法来填充datatable,但是一直失败,请各位帮忙看看,用的sybase数据库,select语句是可以执行的,代码如下:

OleDbDataAdapter dataAdapter = new OleDbDataAdapter("select * from table1", connectionString);
DataTable table = new DataTable();

dataAdapter.Fill(table);
bs.DataSource = table;
datatable对象一直不能加载数据,我用单步调试在即时窗口执行dataAdapter.Fill(table);返回数据库的记录条数,这个是与数据库一直的,但table就是为空,连接字符串和select语句肯定是对的,因为如果用datareader是可以逐条读取数据的。

希望大家帮帮忙,谢谢。
...全文
769 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
bdmh 2012-09-04
  • 打赏
  • 举报
回复
指明填充的表名,参考

OleDbConnection con = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data source=c:\\txl.mdb");
con.Open();
string sql = "select * from stuff";
OleDbDataAdapter da = new OleDbDataAdapter(sql, con);
ds = new DataSet();
da.Fill(ds, "stuff");//填充到ds,表名为stuff
bs.DataSource = ds.Tables[0];
neeka 2012-09-04
  • 打赏
  • 举报
回复
楼上的朋友也遇到过? 那麻烦你发个谢谢, 邮箱zhang_ke@qq.com
hussarzp 2012-09-04
  • 打赏
  • 举报
回复
兄弟,你的问题是sybase的一个bug有可能,我试了好多方法都实现不了,如果你是装的是12.5的话,请把Ole驱动降级一下,应该就可以了。如果有需要我可以给你,我的邮箱是xj7722185@163.com
DENQH 2012-09-04
  • 打赏
  • 举报
回复
 OleDbDataAdapter Adapter = new OleDbDataAdapter();
DataTable table = new DataTable();
using (OleDbConnection connetion = new OleDbConnection(connectionString))
{
Adapter.SelectCommand = new OleDbCommand(SqlString, connetion);
Adapter.Fill(table);

}
neeka 2012-09-04
  • 打赏
  • 举报
回复
table填充后为空,count为0,难道是.net和sybase的兼容问题。。。,reader转也可以但是放着这么方便的方法不用,太伤心了。
代码誊写工 2012-09-04
  • 打赏
  • 举报
回复
你就用datareader填充看看。
记得现要自己通过datareader.getfieldtype;datareader.getname或者datareader.getschematabel创建datatabel的结构
dalmeeme 2012-09-04
  • 打赏
  • 举报
回复
在dataAdapter.Fill(table);后面输出table.Rows.Count看看是几?
neeka 2012-09-04
  • 打赏
  • 举报
回复
就是,加不加表名是一样的,加了一样出错,这就是一个很简单的程序,我实在找不到其他原因了。
代码誊写工 2012-09-04
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]
C# code


DataTable table = new DataTable();
dataAdapter.Fill(table);
这样应该是不可以的 不需要自己定义个dt吧
就如楼上的那样填充吧。
ds = new DataSet();
da.Fill(ds, "stuff");//填充到ds,表名为stuff
[/Quote]

直接填充datatable肯定可以,问题应该处在其它地方。
天下如山 2012-09-04
  • 打赏
  • 举报
回复

DataTable table = new DataTable();
dataAdapter.Fill(table);
这样应该是不可以的 不需要自己定义个dt吧
就如楼上的那样填充吧。
ds = new DataSet();
da.Fill(ds, "stuff");//填充到ds,表名为stuff

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Data.OleDb; namespace 保存GRID数据示例 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button2_Click(object sender, EventArgs e) { //提示是否修改 #region//--------修改数据就将数据保存并显示 if (MessageBox.Show("是否保存数据?", "系统消息", MessageBoxButtons.OKCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) == DialogResult.OK) { #region ..........这里是保存数据代码 //结束编辑 dataGridView1.EndEdit(); //重新用表格数据填充数据容器 OleDbDataAdapter Ada = new OleDbDataAdapter(); DataTable table = (DataTable)dataGridView1.DataSource; //重新启动连接 String ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + System.Windows.Forms.Application.StartupPath + "/驱动.mdb"; //用Buider方法更新数据 using (OleDbConnection connection = new OleDbConnection(ConnectionString)) { Ada.SelectCommand = new OleDbCommand("SELECT * FROM 表", connection); OleDbCommandBuilder builder = new OleDbCommandBuilder(Ada); Ada.UpdateCommand = builder.GetUpdateCommand(); try { //更新数据表数据时 Ada.Update(table); table.AcceptChanges(); MessageBox.Show("操作已成功!数据将全部被保存......", "系统消息", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button2); } catch (System.Data.OleDb.OleDbException ex) { throw new Exception(ex.Message); } } #endregion } #endregion #region //--------不修改就初始化显示以前数据 else { MessageBox.Show("用户取消操作,数据将恢复到初始状态......"); OleDbConnection A = new OleDbConnection(); A.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + System.Windows.Forms.Application.StartupPath + "/驱动.mdb"; try { A.Open(); DataSet B = new DataSet(); string sqlStr = "Select * from 表"; OleDbDataAdapter C = new OleDbDataAdapter(sqlStr, A); C.Fill(B); dataGridView1.DataSource = B.Tables[0]; } catch (System.Data.OleDb.OleDbException ex) { throw new Exception(ex.Message); } finally { A.Close(); } } #endregion } private void button1_Click(object sender, EventArgs e) { OleDbConnection A = new OleDbConnection(); A.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + System.Windows.Forms.Application.StartupPath + "/驱动.mdb"; try { A.Open(); DataSet B = new DataSet(); string sqlStr = "Select * from 表"; OleDbDataAdapter C = new OleDbDataAdapter(sqlStr, A); C.Fill(B); dataGridView1.DataSource = B.Tables[0]; } catch (System.Data.OleDb.OleDbException ex) { throw new Exception(ex.Message); } finally { A.Close(); } } private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) { } } }

110,586

社区成员

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

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

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