【发布时间】:2015-02-13 18:40:51
【问题描述】:
如下图所示,我有两个表格,表格上还有一些示例数据。
我想要在我的项目中实现的目标如下。我的项目中有 4 个窗口窗体。第一个带有两个按钮的表单
New User有一个点击事件-
private void button1_Click(object sender, EventArgs e)
{
NewUser nu = new NewUser();
nu.Show();
}
点击后,会弹出 NewUser 表单
计划是在此处为Users Table 添加数据,然后单击Save and Proceed(现在我使用导航栏上的默认Save 按钮)这将从Users Table 获取UID 并添加它在UID 列下(这是Address Table 中的外键)并打开表单FormAddress,我可以在其中输入表格的数据。
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。
【问题讨论】:
-
SCOPE_IDENTITY()返回在正确批次范围内创建的最后一个标识,即刚刚插入的记录的 id。您没有插入记录,因此不适用。你究竟想要什么?最高电流UID?SELECT MAX(UID) FROM Users -
@BenRobinson 在第二种形式
NewUser我正在插入一个新行。我想要的是 UID 自动结转到下一个表单Address,在那里我可以在与Users Table相同的 UID 下继续填充数据。
标签: c# sql-server winforms