使用 RIGHT JOINT 将两个表连接到一个 datagridview

Posted

技术标签:

【中文标题】使用 RIGHT JOINT 将两个表连接到一个 datagridview【英文标题】:Connecting two tables into one datagridview using RIGHT JOINT 【发布时间】:2013-07-15 13:28:49 【问题描述】:

我在下面有这段代码,它应该连接 2 个表(ZAJSLUZ 和 KLISLUZ),但我需要添加条件以仅从 ZAJSLUZ 中选择那些 AKCE = zakce.Text 列

有人会改进我的代码吗? 它给我的错误是“=”附近有“错误的语法”

DataTable dt = new DataTable();
//SqlDataAdapter SDA = new SqlDataAdapter("select * from zajsluz",spojeni);
SqlDataAdapter SDA = new SqlDataAdapter("SELECT     zajsluz.akce ,zajsluz.text,klisluz.pocet FROM zajsluz RIGHT JOIN klisluz ON zajsluz.ID=klisluz.id WHERE zajsluz.akce="+zakce.Text, spojeni);
SDA.Fill(dt);
dtg_ksluzby.DataSource = dt;

【问题讨论】:

【参考方案1】:

检查 zakce.Text 之前是否为有效字符串。

string sZakce = string.Empty;
if(zakce != null && zakce.Text != null)

  sZakce = zakce.Text;

string sQuery = string.Format("SELECT zajsluz.akce ,zajsluz.text,klisluz.pocet FROM zajsluz RIGHT JOIN klisluz ON zajsluz.ID=klisluz.id WHERE zajsluz.akce= '0'", sZakce)
SqlDataAdapter SDA = new SqlDataAdapter(sQuery, spojeni);

如果您使用 DataAdapters,我还建议您使用 using block,这样您的适配器会自动处理。

using (SqlDataAdapter a = new SqlDataAdapter("SELECT * FROM table", con))

   // use your adapter a           

【讨论】:

它现在运行良好,但它没有选择任何东西:-o 即使在列“akce”表中 zajsluz 是 zakce.Text 的值,但在 klsluz 中没有 zakce.Text 的值这可能是问题吗? sQuery = ... 行设置断点并检查你的sql 命令,prolly zakce.Text 为空/空。 zakce 包含值“999” 两个表都必须包含该值吗?我只需要从包含在列“AKCE”值“999”(zakce.Text)中的表“ZAJSLUZ”值中进行选择我可能使用了错误的查询? 尝试左连接而不是右连接 运行良好,非常感谢!请问我在哪里做错了? RIGHT JOIN 和 LEFT JOIN 有什么区别?【参考方案2】:

像这样改变你的线路。

SqlDataAdapter SDA = new SqlDataAdapter("SELECT     zajsluz.akce ,zajsluz.text,klisluz.pocet FROM zajsluz RIGHT JOIN klisluz ON zajsluz.ID=klisluz.id WHERE zajsluz.akce='"+zakce.Text+"'", spojeni);

【讨论】:

这不起作用,它给了我同样的错误:“bad syntax near=" @BlazenSip zajsluz.akce 是文本字段吗?如果是,请查看我的编辑。我添加了单引号。 我这样做了,但它说:“对象引用未设置为对象的实例” 调试并检查 zakce 或 spojeni 是否为空 它现在运行良好,但它没有选择任何东西:-o 即使在列“akce”表中 zajsluz 是带有 zakce.Text 的值,但在 klsluz 中没有带有 zakce.Text 的值这可能是问题吗?【参考方案3】:
...zajsluz.akce=+"zakce.Text,...

你可能想把它改成

...zajsluz.akce='"+zakce.Text+"'",...

【讨论】:

【参考方案4】:

将你的线路改为

SqlDataAdapter SDA = new SqlDataAdapter("SELECT zajsluz.akce ,zajsluz.text,klisluz.pocet FROM zajsluz RIGHT JOIN klisluz ON zajsluz.ID=klisluz.id WHERE zajsluz.aakce='" + zakce.Text + "'", spojeni);

【讨论】:

【参考方案5】:
SqlDataAdapter SDA = new SqlDataAdapter("SELECT     zajsluz.akce ,zajsluz.text,klisluz.pocet FROM zajsluz RIGHT JOIN klisluz ON zajsluz.ID=klisluz.id WHERE zajsluz.akce= '" +zakce.Text +"'", spojeni);

【讨论】:

以上是关于使用 RIGHT JOINT 将两个表连接到一个 datagridview的主要内容,如果未能解决你的问题,请参考以下文章

将两个部分匹配的表连接到完全匹配

Laravel一张表连接到另外两个由多对多的关系

通过键将两个表连接到数组中

如何将带有前缀列的表连接到 PHP MySQL 或 Laravel 中的另外两个表

数据仓库如何将具有外键的事实表连接到主键包含两个属性的维度表

如何将学生和评估表连接到一个视图中?