我按照下图给出了两张表,并在表格中提供了一些样本数据。
我在项目中想要实现的目标如下。我的项目中有4个窗体。带有两个按钮的第一个表单
New User
点击事件为
private void button1_Click(object sender, EventArgs e)
{
NewUser nu = new NewUser();
nu.Show();
}
点击后,它会显示NewUser表单
计划是在此处为Users Table
添加数据,然后点击Save and Proceed
(现在我使用NAV栏上的默认Save
按钮),这将取UID
1}}来自Users Table
并将其添加到列UID
(Address 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。
答案 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()";