2012-03-26 73 views
4

我想要获取插入到我的Visual C#程序中时返回的最后一个插入的ID。从插入/更新查询获取最后插入的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/

问候

回答

4

有几个问题你的方法,所以我建议你通过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.

+1

甚至在SQL Server 2000中,您不应该使用@@身份。 – HLGEM 2012-03-26 16:53:01

+1

@HLGEM你是对的......谢谢。出于某种原因,我认为'SCOPE_IDENITY()'是在2005年添加的,但是它在2000年被添加了。我想我在7.0中花费的时间比我想要记住的要多。 – 2012-03-26 16:55:17

+0

@MichaelFredrickson非常感谢您的快速回答。 对不起UPDATE/INSERT不匹配。我编辑了我的问题。 我现在已经将tableadapter(tblClipManagerTableAdapter.InsertQuery)的执行模式设置为标量。 仍然同样的错误出现在我的try/catch中。 在哪里把SCOPE_IDENTITY()? – user1281991 2012-03-26 17:13:20