【问题标题】:Get last inserted ID return from a insert/update query从插入/更新查询中获取最后插入的 ID 返回
【发布时间】:2012-03-26 16:37:22
【问题描述】:

我想在我的可视 C# 程序中插入时返回最后插入的 id。

// Insert to database
try
{

    int result = int.Parse(tblClipManagerTableAdapter.InsertQuery(textBox2.Text, textBox1.Text).ToString());
    MessageBox.Show(result.ToString());
}
catch (Exception ex) {
    MessageBox.Show("Fejl: " + ex.Message.ToString());
}

错误是:“对象引用未设置为对象的实例。”

我已将 tblClipManagerTableAdapter.InsertQuery 执行模式设置为标量。

有关如何使用我当前的代码和设置返回最后插入的 ID 的任何帮助?

使用本地 SQL 数据库 (dbClipManager.sdf)。

最好的问候


编辑

我想我找到了可以使用的东西。

但我对此很陌生。不知道如何完成代码编写? 我以前只使用数据集,不打开连接,执行 SQL cmds。 :o/

http://social.msdn.microsoft.com/Forums/en-US/sqlce/thread/1d1d3267-dc29-470b-bb20-00487a39bc87/

最好的问候

【问题讨论】:

    标签: c# sql visual-studio-2010 sql-server-ce


    【解决方案1】:

    你的方法有几个问题,所以我建议你快速阅读table adapter and make sure that you've got the basics down

    1. 如果您尝试添加新记录,您应该调用TableAdapter.Insert,而不是TableAdapter.Update
    2. 您不能对数据库创建第二个命令并使用@@IDENTITY 取回先前生成的ID...这必须在同一个会话中返回,否则 SQL 将不知道哪个您希望收到的 ID。
    3. 如果将表适配器的执行模式设置为标量,则 ID 将是方法调用的返回值。 Please see this Question and Answer on the same issue that you're experiencing.

    编辑: Please see this walk-through for what you're trying to accomplish.

    【讨论】:

    • 即使在 SQL Server 2000 中也不应该使用@@identity。
    • @HLGEM 你是对的......谢谢。出于某种原因,我认为SCOPE_IDENITY() 是在 2005 年添加的,但它是在 2000 年添加的。我想我在 7.0 中花费的时间比我想记住的要多。
    • @MichaelFredrickson 非常感谢您的快速回答。抱歉更新/插入不匹配。我已经编辑了我的问题。我现在已将 tableadapter (tblClipManagerTableAdapter.InsertQuery) 的执行模式设置为标量。我的 try / catch 中仍然出现相同的错误。 SCOPE_IDENTITY() 放在哪里?
    • @user1281991 您可以在插入语句的末尾添加SELECT SCOPE_IDENTITY(),该语句通常是为您的表适配器自动生成的。 This article will walk you through this step-by-step.
    • @MichaelFredrickson 抱歉,但它仍然无法正常工作。 Visual Studio 不允许我将 SELECT SCOPE_IDENTITY() 放入插入查询中。好像 SQLCE 不支持?
    猜你喜欢
    • 2017-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-05
    • 1970-01-01
    • 2016-06-27
    相关资源
    最近更新 更多