C# 如何获取列(ID)的最后输入

C# 如何获取列(ID)的最后输入,c#,sql,C#,Sql,我有一个代码,它应该从列中获取最后一个注册的MemberId,但我无法让它工作,我出了什么错 if (con.State == ConnectionState.Open) { con.Close(); } con.Open(); SqlCommand cmd = con.CreateCommand(); cmd.CommandType = CommandType.Text;

我有一个代码,它应该从列中获取最后一个注册的MemberId,但我无法让它工作,我出了什么错

if (con.State == ConnectionState.Open)
        {
            con.Close();
        }
        con.Open();

        SqlCommand cmd = con.CreateCommand();
        cmd.CommandType = CommandType.Text;
        cmd.CommandText = "SELECT top 1 * FROM Medleminfo ORDER BY MemberId desc";
        cmd.ExecuteNonQuery();
        DataTable dt = new DataTable();
        SqlDataAdapter da = new SqlDataAdapter(cmd);
        da.Fill(dt);
        foreach (DataRow dr in dt.Rows)
        {
            last_id = Convert.ToInt32(dr["MemberId"].ToString());
        }

        return last_id;
此方法中应使用输出最后一个\u id:

public DataTable display_tiger_info(int member_id)
    {
        if (con.State == ConnectionState.Open)
        {
            con.Close();
        }
        con.Open();

        SqlCommand cmd = con.CreateCommand();
        cmd.CommandType = CommandType.Text;
        cmd.CommandText = @"SELECT Medleminfo.MemberId, Medleminfo.Förnamn, Medleminfo.Efternamn, 
        Medleminfo.Adress, Medleminfo.Telefon, Tigerinfo.Tigernamn,Tigerinfo.Födelsedatum 
        FROM Medleminfo, Tigerinfo WHERE Medleminfo.MemberId = Tigerinfo.OwnerID ";
        cmd.ExecuteNonQuery();

        DataTable dt = new DataTable();
        SqlDataAdapter da = new SqlDataAdapter(cmd);
        da.Fill(dt);

        return dt;
    }

为什么不直接使用“Max”函数呢?这是假设您正在查找序列中的最大数字。但是,你的问题的措辞建议你应该有一个日期栏来搜索。另外,如果您只需要一个结果,请尝试执行标量,而不是将其放入数据表并完成所有额外的工作

int id = 0;
using (SqlConnection connection = new SqlConnection(connectionString))
{
    connection.Open();

    using(var command = new SqlCommand("Select Max(MemberId) from Medleminfo", connection))
    {

        id = (int)command.ExecuteScalar();
    }
}

我认为您的问题可能是
cmd.ExecuteNonQuery()
,根据msdn对连接执行Transact-SQL语句并返回受影响的行数

您可能会希望在以下内容中使用
ExecuteReader

if (con.State == ConnectionState.Open)
{
    con.Close();
}
con.Open();

SqlCommand cmd = con.CreateCommand();
cmd.CommandType = CommandType.Text;
//All you want is the member Id why get all the columns 
cmd.CommandText = "SELECT top 1 MemberId FROM Medleminfo ORDER BY MemberId desc";

SqlDataReader reader = cmd.ExecuteReader();
while (reader.Read())
{
    last_id = Convert.ToInt32( reader[0]));
}
return last_id;

更新:此代码可能会解决您的问题,但我没有正确识别问题
cmd.ExecuteNonQuery()
应该删除,因为它没有做任何事情
adapter.Fill()
应该正在执行该命令,我不知道您为什么没有得到预期的响应。

“它不工作”没有告诉我们任何有用的信息。你有错误吗?你期望发生什么,它实际上在做什么?为什么要将查询作为非查询执行?您希望输出是什么?好的,我希望在这种方法中使用last_id作为输出(最后注册的成员)。通过“last”您指的是时间还是最大数?@Tarbh First comment要求您解释实际发生的情况。你还没有这样做。