2017-05-24 42 views
0

我有這段代碼是想讓我從列中最後註冊的MemberId,但我不能得到它的工作,我有什麼錯誤?我如何得到最後輸入列(ID)

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; 
    } 
+4

「這行不通」並沒有告訴我們任何有用的東西。你有錯誤嗎?你期望會發生什麼?它實際上在做什麼*?爲什麼你將查詢作爲非查詢執行? – Amy

+0

作爲輸出你期望什麼? – iMortalitySX

+0

好吧,我期待last_id作爲輸出(註冊最後一個成員)在這個方法中使用 – Tarbh

回答

0

爲什麼不直接使用 '最大' 的功能?這是假設你正在尋找序列中最大的數字。你的問題措辭的方式表明,你應該有一個日期欄來搜索。另外如果你只想得到一個結果,那麼就嘗試執行標量,而不是把它放到數據表中,並且經歷所有額外的工作。

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(); 
    } 
} 
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; 

UPDATE:此代碼可能會解決你的問題,但我沒查出問題正確cmd.ExecuteNonQuery()應該被刪除,但是沒有做任何事情。 adapter.Fill()應該執行命令,我不知道爲什麼你沒有得到預期的響應。

相關問題