sql插入行,但从该行返回一个项目
Posted
技术标签:
【中文标题】sql插入行,但从该行返回一个项目【英文标题】:sql insert row, but return an item from that row 【发布时间】:2016-05-07 07:57:18 【问题描述】:使用 c#、visual studio、razor html 和 asp.net,我有一个订单表,它将客户编号保存在 ecustoemr_id 中,然后它会自动递增 order_id 字段,我需要选择该行的订单 ID我刚刚插入。我不能只从该客户编号中选择所有,因为客户会有多个订单 ID。下面是我如何将客户 ID 保存到数据库中,我需要将刚刚创建的行中的订单 ID 打印到变量中。 我花了几个小时在谷歌上搜索,找到了 php 的答案,但没有使用 c# 和 asp.net 提前谢谢
string sql = "insert into orders (User_ID) values ('" + Request["UserID"] + "')";
var rst1 = db.Query(sql);
【问题讨论】:
为什么不能使用 IDENTITY 列?你到底在用什么 rdbms? Order_ID 设置为身份 True,但我不知道如何调用它,我只是使用 Visual Studio 中内置的那个,它是我们被告知使用的大学 告诉我们你正在使用的 rdbms 的类型,Linq,Entity Framework? 最佳答案取决于您的 rdbms(例如 MS SQL-Server 或 Oracle)。在 SQL-Server 中,您可以使用SCOPE_IDENTITY
。
这些大学教学生如何编写易受 SQL 注入影响的代码?几天内第二个。您应该使用命令参数,而不是尝试为您的 SQL 语句构建字符串。
【参考方案1】:
试试这样的:
string query = "INSERT INTO [Table] (id) OUTPUT INSERTED.ID VALUES (id value)";
SqlCommand com = new SqlCommand(query, dbconnection);
string value;
value = com.ExecuteScalar().ToString();
在这里阅读:https://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.executescalar(v=vs.110).aspx
【讨论】:
【参考方案2】:SCOPE_IDENTITY 的替代方法是 OUTPUT。比如:
DECLARE @OrderOutput TABLE (ID INT NOT NULL)
insert into orders (User_ID)
OUTPUT Inserted.OrderId INTO @OrderOutput(ID)
values ('" + Request["UserID"] + "')"
SELECT ID from @OrderOutput
【讨论】:
我将如何在我的代码中使用它?我们只被教过如何运行简单的 sql 命令,比如 op 中的那个 您可以将其用作字符串而不是插入语句。 rst1 的值将是来自 @OrderOutput 的 ID。 您是否有机会将它从操作中用于我的代码?我试过复制你所说的,但我们只学过非常基本的 SQL,它超出了我的想象以上是关于sql插入行,但从该行返回一个项目的主要内容,如果未能解决你的问题,请参考以下文章
如何编写一个 MySQL 查询,该查询返回一个临时列,其中包含与该行相关的项目是不是存在于另一个表中的标志
SQL 语句,用于查找项目的类型、包含状态以及最近添加的项目