none
DataGridView编程绑定数据源时怎样使用内连接(inner join) RRS feed

  • 问题

  • 1、我知道如下编码

     '按章节填充节点
            Dim cs As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\铁路老定额数据整理.mdb"
            '搜索定额条目
            Using con As New OleDbConnection(cs)
                con.Open()
                Dim SQL As String
                SQL = "SELECT QbsID,QuotaID,QuotaNo,QuotaDesc FROM BaseQuotaA where QbsID=" + RecNode.Tag.ToString
                Dim ada As New OleDbDataAdapter(SQL, con)
                Dim QuotaDataset As New DataSet
                ada.Fill(QuotaDataset, "BaseQuotaA")
                DataGridView1.DataSource = QuotaDataset
                DataGridView1.DataMember = "BaseQuotaA"
                DataGridView1.Columns("QbsID").Visible = False
                DataGridView1.Columns("QuotaID").Visible = False
                DataGridView1.Columns("QuotaNo").HeaderText = "定额编号"
                DataGridView1.Columns("QuotaDesc").HeaderText = "定额名称"
            End Using

    2、将其中的SQL语句修改为以下代码后,我不知要做如何修改,dataset和DataGridView(SQL语句在SQLDBX数据库编辑器中通过ODBC查询是正常的)。

    SELECT Baseres.ResName,Baseres.ResSpec,Baseres.ResUnit,Baseres.UnitWt,BaseResPriceB.ResPrice
    FROM   Baseres
           INNER JOIN BaseResPriceB 
              ON Baseres.ResID = BaseResPriceB.ResID


    http://hi.baidu.com/useek/blog

    2012年4月11日 13:57

答案

  • 首先我不赞同你用中文对变量名、表名进行命名,合理的做法是用英文缩写或者全称命名。

    此外,你既然已经做成了视图,那么可以把“视图”当成是一张普通的数据表处理。因此不能用存储过程,而是普通的SQL 语句:

    1)删除“

    ada.SelectCommand.CommandType = CommandType.StoredProcedure”看看。

    2)如果还有错误,请断点调试DataSet中看看有何问题,建议这样做:

    If TabControl1.SelectedTab.Text = "材料单价" Then
                MessageBox.Show("材料单价")
                '按章节填充节点
                Dim cs As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\铁路老定额数据整理.mdb"
                '搜索定额条目
                Using con As New OleDbConnection(cs)
                    con.Open()
                    Dim SQL As String
                    SQL = "SELECT * FROM 铁建(2006)129号文材料基价"
                    Dim ada As New OleDbDataAdapter(SQL, con)
                    Dim QuotaDataset As New DataSet
                    ada.Fill(QuotaDataset)
                    DataGridView材料单价.DataSource = QuotaDataset.Tables(0)
                 End Using
            End If

       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    • 已标记为答案 firedream 2012年4月12日 3:04
    2012年4月12日 1:44
    版主

全部回复

  • 1、将内连接在ACCESS数据库中写成查询然后保存,查询视图名称:铁建(2006)129号文材料基价

    SELECT BaseResPriceB.BasePrcAID, Baseres.ResClass, Baseres.ResID, Baseres.ResName, Baseres.ResSpec, Baseres.ResUnit, Baseres.UnitWt, BaseResPriceB.ResPrice
    FROM Baseres INNER JOIN BaseResPriceB ON Baseres.ResID = BaseResPriceB.ResID
    WHERE (((Baseres.ResClass)=2 )) and BaseResPriceB.BasePrcAID=17;
    

    2、vb.net中如下写报错,是什么问题呢?

    If TabControl1.SelectedTab.Text = "材料单价" Then
                MessageBox.Show("材料单价")
                '按章节填充节点
                Dim cs As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\铁路老定额数据整理.mdb"
                '搜索定额条目
                Using con As New OleDbConnection(cs)
                    con.Open()
                    Dim SQL As String
                    SQL = "SELECT * FROM 铁建(2006)129号文材料基价"
                    Dim ada As New OleDbDataAdapter(SQL, con)
                    ada.SelectCommand.CommandType = CommandType.StoredProcedure
                    Dim QuotaDataset As New DataSet
    
                    ada.Fill(QuotaDataset, "铁建(2006)129号文材料基价")
    
                    DataGridView材料单价.DataSource = QuotaDataset
                    DataGridView材料单价.DataMember = "铁建(2006)129号文材料基价"
    
                                End Using
            End If


    http://hi.baidu.com/useek/blog

    2012年4月11日 15:21
  • 首先我不赞同你用中文对变量名、表名进行命名,合理的做法是用英文缩写或者全称命名。

    此外,你既然已经做成了视图,那么可以把“视图”当成是一张普通的数据表处理。因此不能用存储过程,而是普通的SQL 语句:

    1)删除“

    ada.SelectCommand.CommandType = CommandType.StoredProcedure”看看。

    2)如果还有错误,请断点调试DataSet中看看有何问题,建议这样做:

    If TabControl1.SelectedTab.Text = "材料单价" Then
                MessageBox.Show("材料单价")
                '按章节填充节点
                Dim cs As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\铁路老定额数据整理.mdb"
                '搜索定额条目
                Using con As New OleDbConnection(cs)
                    con.Open()
                    Dim SQL As String
                    SQL = "SELECT * FROM 铁建(2006)129号文材料基价"
                    Dim ada As New OleDbDataAdapter(SQL, con)
                    Dim QuotaDataset As New DataSet
                    ada.Fill(QuotaDataset)
                    DataGridView材料单价.DataSource = QuotaDataset.Tables(0)
                 End Using
            End If

       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    • 已标记为答案 firedream 2012年4月12日 3:04
    2012年4月12日 1:44
    版主