Oledb Insert statement using parameters(使用参数的Oledb INSERT语句)
本文介绍了使用参数的Oledb INSERT语句的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
如何使用OleDB从不同的表插入参数?
我有3个表: 1.itemTbl 2.板条板 3.ContentTbl
ItemTbl有:itemID,itemName,itemDesc CrateTbl有:crateID,crateName ContentTbl有:crateID,ItemID,QutyContTbl是板条箱的内容和每个
的数量我需要它来选择我使用的不同表中的值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语句的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:使用参数的Oledb INSERT语句
基础教程推荐
猜你喜欢
- c# Math.Sqrt 实现 2022-01-01
- MS Visual Studio .NET 的替代品 2022-01-01
- rabbitmq 的 REST API 2022-01-01
- SSE 浮点算术是否可重现? 2022-01-01
- 为什么Flurl.Http DownloadFileAsync/Http客户端GetAsync需要 2022-09-30
- 将 Office 安装到 Windows 容器 (servercore:ltsc2019) 失败,错误代码为 17002 2022-01-01
- 将 XML 转换为通用列表 2022-01-01
- 如何激活MC67中的红灯 2022-01-01
- 有没有办法忽略 2GB 文件上传的 maxRequestLength 限制? 2022-01-01
- 如何在 IDE 中获取 Xamarin Studio C# 输出? 2022-01-01