【问题标题】:sql insert row, but return an item from that rowsql插入行,但从该行返回一个项目
【发布时间】: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 语句构建字符串。

标签: c# html sql asp.net razor


【解决方案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,它超出了我的想象
    猜你喜欢
    • 2020-06-23
    • 1970-01-01
    • 2012-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-27
    相关资源
    最近更新 更多