2013-03-27 74 views
2

Access 2003 VS 2010 C#if/else語句在執行select命令後插入命令參數c#?

請有人可以幫助我如何做一個else語句。我使用if語句來檢查是否存在重複記錄,並且在使用插入命令參數時如何處理如何使用else語句。在此先感謝

這裏是

OleDbCommand cmd = new OleDbCommand(); 
     cmd.CommandType = CommandType.Text; 

     using (var command = myCon.CreateCommand()) 
      { 
       command.CommandText = "select * from SomeTable where ID = @ID"; 
       command.Parameters.AddWithValue("ID", int.Parse(txtID.Text)); 

       myCon.Open(); 
       var reader = command.ExecuteReader(); 
       { 
        if (reader.HasRows) 
        { 
         while (reader.Read()) 
         { 
          txtID.Text = reader["ID"].ToString(); 

         } 
        } MessageBox.Show("ID Already exist"); 
        else (reader.HasRows !=null // need here pls. 
        { 

         cmd.CommandText = "INSERT INTO SomeTable (ID, AgeGroup, Gender) VALUES (@ID, @AgeGroup, @Gender)"; 
         cmd.Parameters.AddWithValue("@ID", txtID.Text); 
         cmd.Parameters.AddWithValue("@AgeGroup", cBAgeGroup.Text); 
         cmd.Parameters.AddWithValue("@Gender", cBGender.Text); 
         cmd.Connection = myCon; 
         cmd.ExecuteNonQuery(); 
        } 
       } 

       } 
        // cmd.Connection = myCon; 
        // cmd.ExecuteNonQuery(); 
        myCon.Close(); 

更新2 我提出else語句的CMD連接和cmd.ExecuteNonQuery的方法。我能夠檢查id是否已經存在並且能夠插入新記錄。所以代碼正在執行,因爲它應該是。

謝謝大家的建議。

+0

請更新您的冠軍。http://meta.stackexchange.com/questions/10647/how-我寫一個好標題 – 2013-03-27 14:50:35

+0

@SonerGönül - 更好嗎? – bucketblast 2013-03-27 14:52:37

+0

由於您使用c#進行了標記,因此您無需再編寫它。 – 2013-03-27 14:55:30

回答

2

MessageBox不會在ifelse之間屬於您可以直接使用else

if (reader.HasRows) 
{ 
    while (reader.Read()) 
    { 
     txtID.Text = reader["ID"].ToString(); 

    } 
} MessageBox.Show("ID Already exist");   // <--- remove this here 
else (reader.HasRows !=null // need here pls. // <--- remove this here 

所以就把消息框到您已檢測到有給定行if ID:

if (reader.HasRows) 
{ 
    MessageBox.Show("ID Already exist"); 
    // ... 

然後你可以使用插入新記錄在else,因爲你已經知道的HasRows相反的是「T這裏是沒有行「:

else 
{ 
    cmd.CommandText = "INSERT INTO SomeTable (ID, AgeGroup, Gender) VALUES (@ID, @AgeGroup, @Gender)"; 
    // ... 

但是,我不知道這是否是您的代碼中唯一的問題。

更新其實還有其他一些問題,看看這完全重構的代碼:

string selectSql = "SELECT * FROM SomeTable WHERE ID = @ID"; 
string insertSql = "INSERT INTO SomeTable (ID, AgeGroup, Gender) VALUES (@ID, @AgeGroup, @Gender)"; 

int id; 
if (!int.TryParse(txtID.Text, out id)) 
    MessageBox.Show("ID must be an integer."); 
else 
{ 
    using (var myCon = new OleDbConnection(connectionString)) 
    { 
     bool idExistsAlready = true; 
     using (var selectCommand = new OleDbCommand(selectSql, myCon)) 
     { 
      selectCommand.Parameters.AddWithValue("@ID", id); 
      myCon.Open(); 
      using (var reader = selectCommand.ExecuteReader()) 
       idExistsAlready = reader.HasRows; 
     } 
     if (idExistsAlready) 
      MessageBox.Show("ID exists already."); 
     else 
     { 
      using (var insertCommand = new OleDbCommand(insertSql, myCon)) 
      { 
       insertCommand.Parameters.AddWithValue("@ID", id); 
       insertCommand.Parameters.AddWithValue("@AgeGroup", cBAgeGroup.Text); 
       insertCommand.Parameters.AddWithValue("@Gender", cBGender.Text); 
       int affectedRecords = insertCommand.ExecuteNonQuery(); 
      } 
     } 
    } 
} 
+0

好的,謝謝你。我收到「命令文本未設置爲命令對象」錯誤。所以我正在研究這個。所以你是對的懷疑。 – bucketblast 2013-03-27 15:01:12

+0

那麼if(!int.TryParse(txtID.Text,out id))是什麼意思?,更具體地說是id? – bucketblast 2013-03-27 21:53:23

+0

@bucketblast:['int.TryParse'](http://msdn.microsoft.com/zh-cn/library/f02979c7.aspx)將'txtID.Text'中的字符串轉換爲'integer'。如果可以解析它,則返回'true'並設置'out'變量。否則它返回'false'。看看msdn的'out'參數信息:http://msdn.microsoft.com/en-us/library/ee332485.aspx這樣我預先檢查用戶是否輸入了一個有效的(整數)ID到文本框。如果輸入無效,則不需要觸摸數據庫。 – 2013-03-27 21:57:56