2

当我运行此代码时:

SELECT * FROM Free_Cash_Flow AS C

我明白了:

在此处输入图像描述

当我运行此代码时:

SELECT * 
FROM Free_Cash_Flow AS C 
INNER JOIN Quarterly_Growth_Rates AS G ON (C.Ticker = G.Ticker)

我明白了:

在此处输入图像描述

问题是当我添加INNER JOIN语句时,我的Free_Cash_Flow列返回空。

附加信息

这是我用来绑定到的代码DataGridView

con.Open()
Dim cmd3 As OleDbCommand = New OleDbCommand("SELECT * FROM Free_Cash_Flow AS C", con)
Dim reader As OleDbDataReader = cmd3.ExecuteReader()
Dim da As New DataTable
da.Load(reader)
DataGridViewScreen.DataSource = da
reader.Close()
con.Close()

这是表的结构。它们是实际保存的运行计算的查询。字段Growth_RateFree_Cash_Flow是计算。

在此处输入图像描述

在此处输入图像描述

4

2 回答 2

1

你可以试试:-

SELECT
    c.ticker,
    c.year,
    c.period,
    c.free_cash_flow as freecashflow,
    g.qtr,
    g.growth_rate
FROM Free_Cash_Flow as c
INNER JOIN Quarterly_Growth_Rates as g on (c.Ticker = g.Ticker)

为 free_cash_flow 列设置别名 - 以防列名和表名冲突使开放式办公室感到困惑。添加我错过的任何字段...

于 2013-11-12T17:19:08.187 回答
1

当我将 DataGridView 完全置于“自动驾驶”状态时,我无法在 Visual Studio 2010 中的 C# 下重新创建该问题。也就是说,我将 DataGridView 拖放到表单上并添加了以下代码(全部):

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

        private void Form1_Load(object sender, EventArgs e)
        {
            using (var con = new OleDbConnection())
            {
                con.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\Public\Database1.accdb;";
                con.Open();
                using (var cmd = new OleDbCommand())
                {
                    cmd.Connection = con;
                    cmd.CommandText =
                            "SELECT * FROM Free_Cash_Flow AS C";
                    OleDbDataReader rdr = cmd.ExecuteReader();
                    var da = new DataTable();
                    da.Load(rdr);
                    dataGridView1.DataSource = da;
                    rdr.Close();
                }
                con.Close();
            }
        }
    }
}

当我跑的时候,我得到了以下

测试1.png

然后我将查询更改为

cmd.CommandText =
        "SELECT * " +
        "FROM Free_Cash_Flow AS C " +
        "INNER JOIN Quarterly_Growth_Rates AS G ON (C.Ticker = G.Ticker)";

当我再次运行代码时,我得到了

测试2.png

请注意,“Free_Cash_Flow”不为空。

另请注意,这些列的显示顺序与屏幕截图中的顺序不同。这表明可能对您的 DataGridView 进行了一些额外的调整(例如,重新排序列),这些调整可能已将列显式绑定到特定的字段名称或别名。

您应该仔细检查 DataGridView 的属性,以确保它们与修改后的查询(使用 INNER JOIN)提供的匹配。显然 [Free_Cash_Flow] 既是查询名称又是字段名称的事实本身并不是问题。

于 2013-11-12T19:14:33.263 回答