使用SQL命令读取最后从数据库插入的UID

时间:2014-12-15 15:52:49

标签: c# sql-server winforms

我按照下图给出了两张表,并在表格中提供了一些样本数据。

enter image description here

我在项目中想要实现的目标如下。我的项目中有4个窗体。带有两个按钮的第一个表单

enter image description here

New User点击事件为

private void button1_Click(object sender, EventArgs e)
{
    NewUser nu = new NewUser();
    nu.Show();

}

点击后,它会显示NewUser表单 enter image description here

计划是在此处为Users Table添加数据,然后点击Save and Proceed(现在我使用NAV栏上的默认Save按钮),这将取UID 1}}来自Users Table并将其添加到列UIDAddress Table中的外键)下,并打开表单FormAddress,我可以在其中输入表格的数据。{ {0}}

Save and Proceed的点击事件是 -

private void button1_Click(object sender, EventArgs e)
{
    FormAddress ad = new FormAddress();
    ad.Show();
    getdata();
}

经过研究,我了解到我需要使用SCOPE_IDENTITY从上次数据插入中获取UID的值并将其转移到下一个表单。所以我创建了一个方法getdata(),如下所示,并将其添加到按钮事件Save and Proceed

我尝试的代码是

private void getdata()
{

    SqlConnection sqlConnection1 = new SqlConnection(@"mycon string is here;" + "Initial Catalog=Stack;Integrated Security=YES");
    SqlCommand cmd = new SqlCommand();
    SqlDataReader reader;

    cmd.CommandText = "SELECT * FROM Users";
    cmd.CommandType = CommandType.Text;
    cmd.Connection = sqlConnection1;

    sqlConnection1.Open();

    reader = cmd.ExecuteReader();
    // Data is accessible through the DataReader object here.

    cmd.CommandText = "SCOPE_IDENTITY();";

    sqlConnection1.Close();
}

我无法开始工作并弄清楚如何获得SCOPE_IDENTITY并让它发挥作用。在我投票之前请问我。我会根据需要回复并回复/进行更改。我已经压缩了项目和SQL服务器文件HERE,如果有人想下载它们来运行和测试。我使用过SQL Server 2014和Visual Studio 2013。

2 个答案:

答案 0 :(得分:3)

如果您尚未在该连接上完成INSERT,则SCOPE_IDENTITY()未定义。您无法提前显示新的IDENTITY ,因为大多数数据库都是多用户的 - 因此在您实际执行此操作之前无法知道此值 INSERT。显示一个"可能会成为这个"会有误导性。值 - 例如,用户可能将其写下来或用于与某人通信。在数据库中存在之后,显示此值

但是:当您INSERT时,您可以立即简单地查询SCOPE_IDENTITY()以查看该值是什么。最近,you can use the OUTPUT clause of an INSERT operation - 更简单,只有一组SQL操作,它适用于多行:所有胜利。

答案 1 :(得分:1)

获取此行的ID:

cmd.CommandText = "SELECT SCOPE_IDENTITY()";