C# 从C WPF中的select查询中获取最后一个ID

C# 从C WPF中的select查询中获取最后一个ID,c#,sql,C#,Sql,我想获取最后选定的人员ID string personID = "SELECT PersonID FROM TestDatabase.[dbo].[Persons] where name LIKE 'XYZ%'"; SqlCommand cmd = new SqlCommand(personID, con); SqlDataReader reader = cmd.ExecuteReader(); var lastSelectedSingleClientPhoneId = reader.Ge

我想获取最后选定的人员ID

string personID = "SELECT PersonID FROM TestDatabase.[dbo].[Persons] where name LIKE 'XYZ%'";

SqlCommand cmd = new SqlCommand(personID, con);
SqlDataReader reader = cmd.ExecuteReader();


var lastSelectedSingleClientPhoneId = reader.GetDecimal(0);
但不幸的是,它没有起作用。我已经尝试获取int16、int32和int64。当我使用INSERT时,我可以使用以下选项获取ID:

SELECT SCOPE_IDENTITY();
在下面插入命令:

string insertPerson = "INSERT INTO TestDatabase.[dbo].[Persons] (firstName,secondName) VALUES (@firstName,@secondName);SELECT SCOPE_IDENTITY();"; 
SqlCommand cmd = new SqlCommand(insertPerson, con);
cmd.Parameters.AddWithValue("@firstName", txt_firstName.Text);
cmd.Parameters.AddWithValue("@secondName", txt_secondName.Text);
SqlDataReader reader = cmd.ExecuteReader(); 
reader.Read(); 
var lastInsertedPersontId = reader.GetDecimal(0);'

这将返回Persons数据库表中以“XYZ”开头的所有人员

string personID = "SELECT PersonID FROM TestDatabase.[dbo].[Persons] where name LIKE 'XYZ%'";

using(var cmd = new SqlCommand(personID, con))
using (var reader = cmd.ExecuteReader())
{
    while(reader.Read())
    {
        Console.WriteLine(reader.GetValue(0));
    }
}

我很感激您正在寻找一个调用GetXXX的类型,但是您可以轻松地扩展此伪代码以确定合适的类型。

您可以尝试将两个SQL语句组合为一个CommandText值,然后使用它返回最后插入的ID

string insertPerson = "INSERT INTO TestDatabase.[dbo].[Persons] (firstName,secondName) VALUES (@firstName,@secondName); SELECT SCOPE_IDENTITY();"; 
SqlCommand cmd = new SqlCommand(insertPerson, con);
cmd.Parameters.AddWithValue("@firstName", txt_firstName.Text);
cmd.Parameters.AddWithValue("@secondName", txt_secondName.Text);
int personID = (int)cmd.ExecuteScalar();
/// ... convert integer value to a string or do something
您也可以尝试使用以下SQL语句作为替代:

SELECT TOP 1 PersonID FROM Persons ORDER BY PersonID DESC;

你能澄清你所说的“它不起作用”是什么意思吗?它会抛出吗?等等,你是想得到你刚刚插入的记录的ID吗?不是这样做的,请使用。可以显示INSERT语句吗。。您可以在一条语句中执行Insert命令和Select SCOPE_IDENTITY,例如Insert INTO PropertyName、PropertyAddress、PropertyCity、PropertyState、PropertyZip、PropertyNotes+values@Name,@Address,@City,@State,@Zip,@notes选择CASTscope_identity作为int@cristobalito在不存在数据时尝试读取无效-但此查询返回正确的personID。您还需要使用输出参数查看其中一些示例并重构代码。。我已经尝试过-`对象引用未设置为对象的实例。我只想从select查询中获取最后一个选定的personID。您的主键personID的数据类型是什么?Int-我使用SQL SMS 2012。尝试使用替代SQL语句而不是SCOPE_Identity。由于SQL语句不返回任何值,您收到了一个错误。您编写了与我在问题中编写的类似的代码。它不起作用。不引发异常的循环原因。