使用参数的Oledb INSERT语句 [英] Oledb Insert statement using parameters

查看:32
本文介绍了使用参数的Oledb INSERT语句的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如何使用OleDB从不同的表插入参数?

我有3个表: 1.itemTbl 2.板条板 3.ContentTbl

ItemTbl有:itemID,itemName,itemDesc CrateTbl有:crateID,crateName ContentTbl有:crateID,ItemID,Quty

ContTbl是板条箱的内容和每个

的数量

我需要它来选择我使用的不同表中的值WHERE。我尝试了使用本地数据库和基于服务的数据库的类似代码,他们允许我使用,但OleDB不允许我使用值((SELECT))...

错误消息:

System.Data.OleDb.OleDbException:‘查询输入必须至少包含一个表或查询。

我的代码:

cmd.Dispose();

cmd.CommandText = @"INSERT INTO contentTbl(crateID,itemID,qty) VALUES((SELECT crateTbl.crateID FROM crateTbl WHERE crateTbl.crateID=?),(SELECT itemTbl.itemID FROM itemTbl WHERE itemTbl.itemID = ?), ?)";
cmd.Connection = con;

cmd.Parameters.Add(new OleDbParameter("crateID", txtCrate.Text));
cmd.Parameters.Add(new OleDbParameter("itemID", txtItem.Text));
cmd.Parameters.Add(new OleDbParameter("qty", txtQty.Text));

con.Open();
cmd.ExecuteNonQuery();
con.Close();

MessageBox.Show("Done!");

da.SelectCommand = new OleDbCommand("SELECT * FROM contentTbl", con);
da.Fill(dt);

dgvContent.DataSource = dt;

推荐答案

该错误消息非常具有描述性。Access不支持没有主查询的子查询,因此请更改语法循环以使用其中一个子查询作为主查询:

INSERT INTO  contentTbl(crateID,itemID,qty)
SELECT crateTbl.crateID,(SELECT itemTbl.itemID FROM itemTbl WHERE itemTbl.itemID = ?), ?
FROM crateTbl WHERE crateTbl.crateID=?

请注意,参数是按位置传递的,重写此查询确实需要对参数重新排序:

cmd.Parameters.Add(new OleDbParameter("itemID", txtItem.Text));
cmd.Parameters.Add(new OleDbParameter("qty", txtQty.Text));
cmd.Parameters.Add(new OleDbParameter("crateID", txtCrate.Text));

如果您不喜欢主查询/子查询语法,也可以使用交叉连接:

INSERT INTO  contentTbl(crateID,itemID,qty)
SELECT crateTbl.crateID, itemTbl.itemID, ?
FROM crateTbl,itemTbl  
WHERE crateTbl.crateID=? AND itemTbl.itemID = ?

(参数顺序需要重新调整,但您可以弄清楚)。

这篇关于使用参数的Oledb INSERT语句的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆