如何获取列的最后一个输入(ID)

时间:2017-05-24 16:45:53

标签: c# sql

我有这个代码,想让我从列中找到最后一个注册的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;

输出last_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;
    }

2 个答案:

答案 0 :(得分:0)

为什么不使用'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();
    }
}

答案 1 :(得分:0)

我认为你的问题可能是cmd.ExecuteNonQuery(),根据msdn SqlCommand.ExecuteNonQuery Method对连接执行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()应该执行命令,我不知道为什么你没有得到预期的响应。