找回密码
 立即注册

QQ登录

只需一步,快速开始

lifesky2006

注册会员

11

主题

79

帖子

152

积分

注册会员

积分
152

活字格认证

lifesky2006
注册会员   /  发表于:2016-5-25 01:02  /   查看:7956  /  回复:14
如题,请给出一个使用ADO方式操作数据库的例子,V7.0使用指南里是使用了OleDbConnection控件和OleDbDataAdapter控件的方式
我想用直接代码的方式进行操作,使用控件的话,数据库地址是绝对地址,没法变化。
我的代码如下
           string connStr="Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + Application.StartupPath + "\\data.accdb";

            OleDbConnection cn=new OleDbConnection(connStr);
            OleDbDataAdapter adapter;
            //DataTable dt = new DataTable();
            DataSet ds=new DataSet();

            try
            {
                string sql = "select * from 活动表";
                adapter = new OleDbDataAdapter(sql, cn);
                adapter.Fill(ds);
                  if (ds.Tables[0].Rows.Count>0)
                {
                    //关闭自动生成列属性
                    //fpsData.Sheets[0].AutoGenerateColumns = false;
                    //绑定数据源
                    fpsData.DataSource =ds;
                    fpsData.TypeVAlign = FPSpreadADO.TypeVAlignConstants.TypeVAlignCenter;
                }

            }
            catch(Exception e)
            {
                MessageBox.Show(e.Message);
             }
        }



在 fpsData.DataSource =ds; 这一行出现错误:错误        5        无法将类型“System.Data.DataSet”隐式转换为“msdatasrc.DataSource”。存在一个显式转换(是否缺少强制转换?)       
如果改为fpsData.DataSource =(msdatasrc.DataSource)ds; 则会提示 无法将“System.Data.DataSet”隐式转换为“msdatasrc.DataSource”


用DataTable dt 这种类型也是同样的错误
请问我代码哪里有问题?能否给出一个实际的例子

14 个回复

倒序浏览
dexteryao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2016-5-25 14:59:10
沙发
您好,“我想用直接代码的方式进行操作,使用控件的话,数据库地址是绝对地址,没法变化。”没有明白你的需求。
使用accdb 数据库我这里没有现成的环境,正在搭建遇到了些问题,搭建好后建立demo。
您先测试下用代码生成 DataTable
然后绑定看是否报错,排除spread控件原因。

  1.     DataTable dt = new DataTable();
  2.             dt.Clear();
  3.             dt.Columns.Add("Name");
  4.             dt.Columns.Add("Marks");
  5.             DataRow _ravi = dt.NewRow();
  6.             _ravi["Name"] = "ravi";
  7.             _ravi["Marks"] = "500";
  8.             dt.Rows.Add(_ravi);
复制代码
回复 使用道具 举报
lifesky2006
注册会员   /  发表于:2016-5-25 18:32:56
板凳
谢谢,我的意思是 V7.0使用指南里是使用了OleDbConnection控件和OleDbDataAdapter控件的方式,比如
6.1.2 设置数据库链接
您必项告诉顷目您要使用癿数据库。在返一步,您将添加一个 OleDbConnection 癿控件到您癿窗
体上,设置需要绊定癿数据库癿名称。
1. 如果“工具箱“没有显示,在“规图“菜单上选择使乊显示。
2. 单击数据选顷卡来显示可用癿数据控件。
3. 双击 OleDbConnection 控件,将其添加到您癿窗体上。 OleDbConnection 控件添加到您癿窗体
上以后,一个新癿可规区域将会显示在窗体癿下面。在返个演练中您创建癿数据控件将被放置
到返个区域, 叏而代乊窗体癿可规区域。
4. 挄 F4 来显示 OleDbConnection 控件癿 Properties window 属性。.
5. 在属性窗口上,设置控件癿名字为 dbConnect。
6. 在属性窗口上,点击 ConnectionString 属性。
7. 单击设置区域癿向下箭头然后在下拉列表中选择创建一个新癿连接。Data Link Properties 对话
框将会显示。
8. 单击 Provider 选顷卡,然后在列表中选择 Microsoft Jet 4.0 OLE DB Provider。
9. 单击 Next。
10.在 Select 戒者输入数据库名字框癿旁边,点击一个浏觅挄钮。
11.浏觅 \Spread.WinForm\Docs\TutorialFiles\databind.mdb 然后选择打开。
12.单击 测试连接挄钮。
13.如果您没有收到"Test connection succeeded" 癿消息框,请重做步骤 6 到 12。
14.如果您收到了 "Test connection succeeded,"消息。您癿连接完成了。单击 OK 然后选择 Data
Link Properties 对话框。

在第11步中需要指定一个绝对路径,如果我想指定相对路径怎么办?程序编译后复制到其他地方绝对路径就不能使用了
回复 使用道具 举报
lifesky2006
注册会员   /  发表于:2016-5-25 18:35:35
地板
6.1.4 创建数据集
现在您已绉从数据库中挃定了数据库和数据,接下来您将在 FarPoint Spread 组件中创建一个包吨
您癿数据癿数据集。
使用代码
1. 选择窗体上癿 dbAdapt OleDBDataAdapter 控件。
2. 如果属性窗口没有显示,挄“F4”来显示控件癿属性窗口。
Spread for WinForms 表格控件 V7.0 使用挃南
产品网站:http://www.gcpowertools.com.cn 产品论坛:http://gcdn.grapecity.com 72 of 133
3. 点击属性窗口下癿“生成数据集”。
4. 生成数据集对话框将出现。
5. 点击 OK 关闭生成数据集对话框。新癿数据集控件将添加到窗体上。
6. 挄“F4”打开新癿数据集控件癿属性窗口。
7. 在属性窗口中,把控件名字修改为 dbDataSet。
8. 双击您工程中癿窗体,打开代码窗口。
9. 在 Form_Load 事件中键入如下代码:

而且这一节的第3步,没有找到“生成数据集”
回复 使用道具 举报
lifesky2006
注册会员   /  发表于:2016-5-25 18:36:27
5#
另外,您的代码
DataTable dt = new DataTable();
            dt.Clear();
            dt.Columns.Add("Name");
            dt.Columns.Add("Marks");
            DataRow _ravi = dt.NewRow();
            _ravi["Name"] = "ravi";
            _ravi["Marks"] = "500";
            dt.Rows.Add(_ravi);
/////////////////////////////////////////////////////////上面的代码都没有问题的,下面这一句
            fpsData.DataSource = dt;

仍然提示错误        5        无法将类型“System.Data.DataSet”隐式转换为“msdatasrc.DataSource”。存在一个显式转换(是否缺少强制转换?)   
回复 使用道具 举报
lifesky2006
注册会员   /  发表于:2016-5-25 18:40:34
6#
而且 我使用官网上的数据绑定代码
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
using System;
using System.Data;
using System.Data.OleDb;
using System.Drawing;
using System.Web.UI;

namespace ControlExplorer.samples.DataBinding
{
  public partial class Overview : SpreadDemoPage
  {
    protected void Page_Load(object sender, System.EventArgs e)
    {
      if (!Page.IsPostBack)
      {
        //FarPoint.Web.Spread.DefaultSkins.GetAt(1).Apply(FpSpread1.Sheets[0]);
        FpSpread1.CommandBar.BackColor = Color.Wheat;

        //Set the database connection
        DataGrid1.DataSource = GetSuppliers();
        FpSpread1.DataSource = GetSuppliers();

        Page.DataBind();

        //Set the widths
        FpSpread1.ActiveSheetView.Columns[0].Width = 60;
        FpSpread1.ActiveSheetView.Columns[1].Width = 350;
        this.FpSpread1.UseClipboard = false;
      }
    }

    #region Web Form Designer generated code
    override protected void OnInit(EventArgs e)
    {
      //
      // CODEGEN: This call is required by the ASP.NET Web Form Designer.
      //
      InitializeComponent();
      base.OnInit(e);
    }

    /// <summary>
    /// Required method for Designer support - do not modify
    /// the contents of this method with the code editor.
    /// </summary>
    private void InitializeComponent()
    {

    }
    #endregion

    DataSet GetSuppliers()
    {
      string constr = @"rovider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\Northwind.mdbersist Security Info=True";
      string sqlstr =
@"SELECT TOP 23
        SupplierID as 供应商编号,
        CompanyName as 公司名称,
        ContactName as 注册名称 ,
        ContactTitle as 职位,
        Address as 地址,
        City as 城市,
        Region as 区域,
        PostalCode as 邮政编码,
        Country as 国家,
        Phone as 电话,
        Fax as 传真,
        HomePage as 主页
  FROM suppliers";

      DataSet suppliers = new DataSet();
      using (OleDbConnection myconn = new OleDbConnection(constr))
      {
        OleDbDataAdapter sqlAdapter1 = new OleDbDataAdapter(sqlstr, myconn);
        sqlAdapter1.Fill(suppliers, "Suppliers");
      }

      return suppliers;
    }
  }
}

仍然提示错误        5        无法将类型“System.Data.DataSet”隐式转换为“msdatasrc.DataSource”。存在一个显式转换(是否缺少强制转换?)   
在 FpSpread1.DataSource = GetSuppliers();这一行
回复 使用道具 举报
lifesky2006
注册会员   /  发表于:2016-5-25 18:44:19
7#
我的代码如下:

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 订单处理
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            fpsData.DataSource = GetSuppliers();
        }
/*       public void getData()
        {
            string connStr="rovider=Midrosoft.Jet.OLEDB.4.0;Data Source=" + Application.StartupPath + "\\data.accdb";
            OleDbConnection cn=new OleDbConnection(connStr);
            OleDbDataAdapter adapter = new OleDbDataAdapter();
            //DataTable dt = new DataTable();
            DataSet ds;
            try
            {
                string sql = "select * from 活动表";
                adapter = new OleDbDataAdapter(sql, cn);
                adapter.Fill(ds);
                  if (ds.Tables[0].Rows.Count >0)
                {
                    fpsData.DataSource = ds.Tables[0].DefaultView; ;
                    fpsData.TypeVAlign = FPSpreadADO.TypeVAlignConstants.TypeVAlignCenter;
                }
            }
            catch(Exception e)
            {
                c**B c**ata;
               

            }
        }*/
        DataSet GetSuppliers()
        {
            string constr = @"rovider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\Northwind.mdbersist Security Info=True";
            string sqlstr = "select * from 活动表";

            DataSet suppliers = new DataSet();
            using (OleDbConnection myconn = new OleDbConnection(constr))
            {
                OleDbDataAdapter sqlAdapter1 = new OleDbDataAdapter(sqlstr, myconn);
                sqlAdapter1.Fill(suppliers, "Suppliers");
            }

            return suppliers;
        }
    }
}


/////////////////上面的getData()注释掉了,不知道我的代码有没有问题,我需要先判断记录条数是否大于0,然后进行绑定,但是总是出错,提示错误5,类型不能强制转换那个错误。
DataSet GetSuppliers() 是借鉴的官网数据绑定示例,也就是我上面贴的代码,但是仍然出错,出错问题一样是错误5

回复 使用道具 举报
dexteryao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2016-5-26 08:42:44
8#
您好,我明白您的需求了。希望用代码方式从数据库获取数据后帮到到spread。
您使用new DataTable方式绑定数据仍然报错说明不是数据库连接的问题。

您新建一个工程,拖一个FpSpread 控件到form上。然后绑定DataTAble是否报错。
您的 fpsData 是 FarPoint.Win.Spread.FpSpread 类型吗?

  1.     public partial class Form1 : Form
  2.     {
  3.         public Form1()
  4.         {
  5.             InitializeComponent();
  6.             DataTable dt = new DataTable();
  7.             dt.Clear();
  8.             dt.Columns.Add("Name");
  9.             dt.Columns.Add("Marks");
  10.             DataRow _ravi = dt.NewRow();
  11.             _ravi["Name"] = "ravi";
  12.             _ravi["Marks"] = "500";
  13.             dt.Rows.Add(_ravi);
  14.             /////////////////////////////////////////////////////////上面的代码都没有问题的,下面这一句
  15.             fpSpread1.DataSource = dt;
  16.         }
  17.     }
复制代码
回复 使用道具 举报
lifesky2006
注册会员   /  发表于:2016-5-26 17:48:28
9#
dexteryao 发表于 2016-5-26 08:42
您好,我明白您的需求了。希望用代码方式从数据库获取数据后帮到到spread。
您使用new DataTable方式绑定 ...

我已经测试过了啊  这不是你上次给我的程序么?  我在回复里已经说过了  还是错误5
回复 使用道具 举报
lifesky2006
注册会员   /  发表于:2016-5-26 17:53:52
10#
我是fpspread8.0  引用的是(见附件)

而且只是两行最简单的代码,仍然提示错误
private void Form1_Load(object sender, EventArgs e)
        {
            DataTable dt=new DataTable();
            fpsData.DataSource = dt;
        }

错误        1        无法将类型“System.Data.DataTable”隐式转换为“msdatasrc.DataSource”。存在一个显式转换(是否缺少强制转换?)        E:\VS2010\订单处理\订单处理\Form1.cs        23        34        订单处理

fp1.jpg
fp2.jpg
fp3.jpg
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部