2016-02-24 29 views
0

我是一個嘗試使用「DELETE FROM」查詢從AccessDatabase刪除行的新手程序員。它需要一個字符串轉換爲int這是哪裏出了問題發生C#從AccessDatabase中刪除一行/將字符串轉換爲Int

下面的代碼我跑:

private void BtnDelete_Click(object sender, EventArgs e) 
{ 

    OleDbConnection Conn = new OleDbConnection(); 
    Conn.ConnectionString = @"Provider = Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\\HoliPlanData.accdb;Persist Security Info=False"; 

    try 
    { 
     Conn.Open(); 
      String Query = "DELETE * FROM [Employee] WHERE PayrollNo = @PayrollNo"; 
      OleDbCommand DoDelete = new OleDbCommand(Query, Conn); 
      String PayrollNo = PassPayrollNo; 
      int PayRowNum = 0; 
      bool isValid = int.TryParse(PassPayrollNo, out PayRowNum); 
      if (isValid) 
      { 
       DoDelete.Parameters.AddWithValue("@PayrollNo", PayRowNum); 
       DoDelete.ExecuteNonQuery(); 
       MessageBox.Show("Success"); 
       Conn.Close(); 
      } 
      else 
      { 
       MessageBox.Show("Could not convert to string"); 
       Conn.Close(); 
      }   

} 

當我運行此我進入else子句,所以轉換爲字符串ISN沒有工作

怎麼回事?爲什麼? 任何幫助將不勝感激,謝謝。

+0

什麼是'PayrollNo'列的類型,什麼是類型和'PassPayrollNo'的價值? –

+0

我認爲PayrollNo是一個字符串,但在數據庫中的一個數字 – Josh

+0

You _think_?你不知道嗎?然後,如果它是有效整數,則需要將字符串解析爲int。 –

回答

1

嘗試通過整型參數:

int payrowNum = 0; 
bool isValid = int.TryParse(PassPayrollNo, out payrowNum); 
if(isValid) 
{ 
    string sQuery = "DELETE * FROM [Employee] WHERE PayrollNo = @PayrollNo"; 
    OleDbCommand DoDelete = new OleDbCommand(sQuery, Conn); 
    DoDelete.Parameters.AddWithValue("@PayrollNo", payrowNum); 
    int rowsAffected = DoDelete.ExecuteNonQuery(); 
    if(rowsAffected>0) 
    { 
     MessageBox.Show("Success"); 
    } 
    Conn.Close(); 

} 
+0

我已經添加了這一點,該代碼沒有錯誤運行,它只是不刪除數據 – Josh

+1

嘗試更新查詢,請告訴我,如果你把它刪除了此時間:d – Gnqz

+0

我已經做了,仍然會得到相同的。我添加了一個ELSE子句,並在上面的問題中添加了更改,如果您想查看 – Josh

1

問題出在您的參數@PayrollNo上,您必須確保變量PassPayrollNo與您的表中的PayrollNo類型相同。如果您顯示您正在使用的類型,我們可以嘗試幫助您更多。