从 table 获取 RecordId
Get RecordId from table
我是 SQL 的新手,我有 table 和 RecordId
自动递增并且是主键。我想获取插入到 table 中的行的 RecordId
。
在此先感谢您的帮助。
myCommand.CommandText = "INSERT INTO " + tableName + " (DateRaised,RaisedBy,WeekNo,Platform,Department,Site,Process, Area,NavErrorNo,RootCauseDescription,Status) " +
"VALUES ('" + currentDate.ToString(format) + "','" +
sender + "'," +
weekNumber + ",'" +
comboBoxPlatform.SelectedItem + "','" +
comboBoxDepartment.SelectedItem + "','" +
comboBoxSite.SelectedItem + "','" +
comboBoxProcess.SelectedItem + "','" +
comboBoxArea.SelectedItem + "','" +
textBoxNavError.Text + "','" +
textBoxIssue.Text + "','Open')";
//int lastInsertedId =
myCommand.ExecuteNonQuery();
lastInsertedId
在我的 table.
中应该是来自 RecordId
的整数
这应该能帮到您
private void SelectLast()
{
string sqlLast = "SELECT TOP(1) RecordId FROM [YourtableName] ORDER BY 1 DESC";
Connection.Open();
using (SqlCommand cmd = new SqlCommand(sqlLast, Connection))
{
cmd.CommandType = CommandType.Text;
{
int insertedID = Convert.ToInt32(cmdAdd.ExecuteScalar());
textBoxID.Text = Convert.ToString(insertedID);
}
Connection.Close();
}
}
首先,从代码调用直接 SQL 语句不是一个好主意,它可能会导致 SQL 注入问题,正如@Zohar 所建议的那样。
您可以使用用户参数化查询或 sp.
在sp里面,可以使用
SELECT @@IDENTITY AS 'Identity';
Insert语句后,会returnPK的最后一个自增值,
然后 return 这个值作为输出参数,并在 C# 代码中的 .ExecuteNonQuery();
之后捕获它。
要正确(如果这是针对SQL服务器 - 你对此不是很清楚) ,我看到两个选项:
方法#1 - 使用SCOPE_IDENTITY
如果您一次只插入一行,这很有效 - 使用类似这样的东西:
// set up your query using *PARAMETERS** as you **ALWAYS** should!
// Using SELECT SCOPE_IDENTITY() to get back the newly inserted "Id"
myCommand.CommandText = "INSERT INTO dbo.SomeTable (list-of-columns) " +
"VALUES (@param1, @param2, @param3, ...., @paramN); " +
"SELECT SCOPE_IDENTITY();";
// set up the parameters and theirs values
object result = myCommand.ExecuteScalar();
if (result != null)
{
int lastInsertedId = Convert.ToInt32(result);
}
方法 #2 - 使用 OUTPUT
子句
即使您一次插入多行(通常在 INSERT
之后使用 SELECT
),这也能很好地工作:
// set up your query using *PARAMETERS** as you **ALWAYS** should!
// Using SELECT SCOPE_IDENTITY() to get back the newly inserted "Id"
myCommand.CommandText = "INSERT INTO dbo.SomeTable (list-of-columns) " +
"OUTPUT Inserted.RecordId " +
"VALUES (@param1, @param2, @param3, ...., @paramN); ";
// set up the parameters and theirs values
object result = myCommand.ExecuteScalar();
if (result != null)
{
int lastInsertedId = Convert.ToInt32(result);
}
我是 SQL 的新手,我有 table 和 RecordId
自动递增并且是主键。我想获取插入到 table 中的行的 RecordId
。
在此先感谢您的帮助。
myCommand.CommandText = "INSERT INTO " + tableName + " (DateRaised,RaisedBy,WeekNo,Platform,Department,Site,Process, Area,NavErrorNo,RootCauseDescription,Status) " +
"VALUES ('" + currentDate.ToString(format) + "','" +
sender + "'," +
weekNumber + ",'" +
comboBoxPlatform.SelectedItem + "','" +
comboBoxDepartment.SelectedItem + "','" +
comboBoxSite.SelectedItem + "','" +
comboBoxProcess.SelectedItem + "','" +
comboBoxArea.SelectedItem + "','" +
textBoxNavError.Text + "','" +
textBoxIssue.Text + "','Open')";
//int lastInsertedId =
myCommand.ExecuteNonQuery();
lastInsertedId
在我的 table.
RecordId
的整数
这应该能帮到您
private void SelectLast()
{
string sqlLast = "SELECT TOP(1) RecordId FROM [YourtableName] ORDER BY 1 DESC";
Connection.Open();
using (SqlCommand cmd = new SqlCommand(sqlLast, Connection))
{
cmd.CommandType = CommandType.Text;
{
int insertedID = Convert.ToInt32(cmdAdd.ExecuteScalar());
textBoxID.Text = Convert.ToString(insertedID);
}
Connection.Close();
}
}
首先,从代码调用直接 SQL 语句不是一个好主意,它可能会导致 SQL 注入问题,正如@Zohar 所建议的那样。 您可以使用用户参数化查询或 sp.
在sp里面,可以使用
SELECT @@IDENTITY AS 'Identity';
Insert语句后,会returnPK的最后一个自增值,
然后 return 这个值作为输出参数,并在 C# 代码中的 .ExecuteNonQuery();
之后捕获它。
要正确(如果这是针对SQL服务器 - 你对此不是很清楚) ,我看到两个选项:
方法#1 - 使用SCOPE_IDENTITY
如果您一次只插入一行,这很有效 - 使用类似这样的东西:
// set up your query using *PARAMETERS** as you **ALWAYS** should!
// Using SELECT SCOPE_IDENTITY() to get back the newly inserted "Id"
myCommand.CommandText = "INSERT INTO dbo.SomeTable (list-of-columns) " +
"VALUES (@param1, @param2, @param3, ...., @paramN); " +
"SELECT SCOPE_IDENTITY();";
// set up the parameters and theirs values
object result = myCommand.ExecuteScalar();
if (result != null)
{
int lastInsertedId = Convert.ToInt32(result);
}
方法 #2 - 使用 OUTPUT
子句
即使您一次插入多行(通常在 INSERT
之后使用 SELECT
),这也能很好地工作:
// set up your query using *PARAMETERS** as you **ALWAYS** should!
// Using SELECT SCOPE_IDENTITY() to get back the newly inserted "Id"
myCommand.CommandText = "INSERT INTO dbo.SomeTable (list-of-columns) " +
"OUTPUT Inserted.RecordId " +
"VALUES (@param1, @param2, @param3, ...., @paramN); ";
// set up the parameters and theirs values
object result = myCommand.ExecuteScalar();
if (result != null)
{
int lastInsertedId = Convert.ToInt32(result);
}