2012-08-15 60 views
1

我在.NET Framework 2.0中的C#代碼中使用的SqlTransaction時,有一個問題如何在sqltransaction中讀取未完成的事務?

這是我的代碼:

public bool register() 
    { 
     SqlConnection conn = DB.getInstance().getConnection(); 
     conn.Open(); 
     SqlTransaction sqlTransaction = conn.BeginTransaction(); 
     SqlCommand cmd = new SqlCommand(); 
     cmd.Connection = conn; 
     cmd.Transaction = sqlTransaction;   

     try 
     { 
      cmd = insertMembers(cmd); 
      cmd.ExecuteNonQuery(); 

      SqlDataReader read = null; 
      cmd.CommandText = "SELECT * FROM members WHERE username='" + username + "'"; 
      read = cmd.ExecuteReader(); 
      while (read.HasRows) 
      { 
       id0 = (int)read["id0"]; 
      } 

      cmd = insertMembersBalance(cmd); 
      cmd.ExecuteNonQuery(); 

      cmd = insertMembersEPoint(cmd); 
      cmd.ExecuteNonQuery(); 

      cmd = insertMembersVerify(cmd); 
      cmd.ExecuteNonQuery(); 

      reset(); 

      sqlTransaction.Commit(); 
     } 
     catch(Exception e) 
     {     
      sqlTransaction.Rollback(); 
      Console.WriteLine(e.ToString()); 
      return false; 
     } 
     finally 
     { 
      conn.Close(); 
     } 

     return true; 
    } 

我無法從成員表中的ID用於插入另一個記錄成另一張桌子。

有沒有其他解決方案?

+0

「我無法從成員表中獲取的ID到另一個記錄用於插入到另一個表」。 - 爲什麼你不能? – 2012-08-15 16:38:41

+0

我得到這個錯誤$例外\t {「當無數據存在時,無效嘗試閱讀。」} – kelvingo935 2012-08-15 16:41:46

+0

請記住,您可以回答自己的問題,所以請在下面張貼並將其標記爲答案。 – HenryZhang 2012-08-15 17:23:08

回答

0

必須調用dr.Read()第一比SqlDataReader dr = cmd.........

0
 if (read.HasRows) // needs to be if not while or it will just loop 
     { 
      read.Read(); 
      id0 = (int)read["id0"]; 
     } 
     read.Close();  // need to close the reader before you can use the cmd 

     if you want to loop through all rows then 

     while (read.Read()) 
     { 
      id0 = (int)read["id0"]; 
     } 
相關問題