2012-04-01 67 views
0

我想創建一個方法,我可以執行MySQL UPDATE,DELETE或INSERT查詢。該方法必須在使用INSERT時請求或請求last_insert_id()。下面是我此刻的代碼:C#mysql一個返回last_insert_id

public int executeUID(MySqlCommand msCommand) 
{ 
    try 
    { 
    this.Open(); 

    msCommand.Connection = this.msCon; 

    return int.Parse(msCommand.ExecuteScalar().ToString()); 
    } 
    catch (MySqlException ex) 
    { 
    throw ex; 
    } 
    finally 
    { 
    this.Close(); 
    } 
} 

的問題,這是是,當我使用插入查詢,返回一個last_insert_id()的方法效果很大。但是,當查詢不返回last_insert_id()該方法出現故障。我怎樣才能使這種方法工作?

+0

你說的*方法故障* 做到這一點:爲什麼呢?你對這種方法有什麼期望?如果您的查詢是select或其他內容,那麼您希望該方法返回什麼內容? – Marco 2012-04-01 11:25:58

+0

您是否試圖獲取交易所影響的行? – 2012-04-01 11:37:45

+0

你能展示一個可行的查詢例子和一個不起作用的查詢例子嗎?在_malfunctions_的情況下,你會得到一個異常嗎?如果是,那麼錯誤信息是什麼? – Steve 2012-04-01 11:38:14

回答

0

爲什麼不使用OUTPUT PARAMETER,它會返回最後插入的ID。 SqlParamet

如果你知道什麼時候可以生成LastInsertID,那麼你可以傳入一個參數給方法,告訴它正在重試插入ID,根據該參數你可以做一些這樣的事情。

public int executeUID(MySqlCommand msCommand, bool Mode) //Mode==true means insertandRetriveLastID, false means =dont retrive last insertedit 
{ 
    try 
    { 
    this.Open(); 

    msCommand.Connection = this.msCon; 

    if(Mode) //for getting last inserted id 
    { 
     SqlParameter outParams= new SqlParameter("@ID", SqlDbType.Int); 
     outParams.Direction = ParameterDirection.Output; 
     msCommand.Parameters.Add(outParams) 
     msCommand.ExecuteNonQuery(); 
     var outputValue = cmd.Parameters["@ID"].Value; 
    } 
    else //if no inserted id is not there 
    { 
     return msComand.ExecuteNonQuery(); // it will return No of Rows Affected. 
    } 

    } 
    catch (MySqlException ex) 
    { 
    throw ex; 
    } 
    finally 
    { 
    this.Close(); 
    } 
} 

PS:你需要調整它的一些更多更好的效率,因爲我給了一些基本的想法如何,我們可以在沒有參數

+0

是的,這應該工作。然而,從乾淨的代碼角度來看這是一個非常糟糕的做法。一種方法應該只做一件事,這裏不是這種情況。正確的解決方案是將其拆分爲兩種新方法,而不是在模式間切換時添加bool ...... – walther 2012-04-01 12:03:59

+0

我希望我的代碼儘可能乾淨。所以一定不能有任何方法可以做很多事情 – Bernhard 2012-04-01 12:22:46

相關問題