2015-07-21 58 views
0

你好,試圖根據條件刪除表中的幾行,但我需要一些幫助,基本上我想刪除所有行,而條件爲真,然後停止並離開休息不變。用條件刪除多行

編輯:關於評論我道歉,即時通訊相當新的編程,抱歉,如果不做正確的事情即時通訊新本網站以及。

private void button1_Click(object sender, EventArgs e) 
{ 
    string varsql2check = ""; 
    do{ 
     SqlConnection conn = new SqlConnection(@"Data Source=.\wintouch;Initial Catalog=bbl;User ID=sa;Password=Pa$$w0rd"); 
     conn.Open(); 
     string varsql = "DELETE FROM wgcdoccab WHERE 'tipodoc' ='FSS' and 'FP' "; //sql query 

     SqlCommand cmd = new SqlCommand(varsql, conn); 

     SqlDataReader dr = cmd.ExecuteReader(); 

    } while(varsql2check = "SELECT * from wgcdoccab where 'tipodoc' !='FSS' and !='FP' and contribuinte !='999999990' and datadoc != CONVERT(varchar(10),(dateadd(dd, -1, getdate())),120);"); 

     dr.Close(); 
     conn.Close(); 
} 
+0

你沒有指出是否出了問題。你有錯誤嗎? – Saragis

+2

你的代碼中有太多錯誤。您的查詢將不會工作。你有沒有先讀過關於C#和ADO.NET的書? –

+0

您在列名稱周圍使用單引號。我認爲這是一個印刷錯誤,並投票結束這些問題。 –

回答

1

你需要做的是:

private void button1_Click(object sender, EventArgs e) 
{ 
    bool check = true; 
    do 
    { 
      string connectionString = @"Data Source=.\wintouch;Initial Catalog=bbl;User ID=sa;Password=Pa$$w0rd"; 
      string queryString = string.Empty; 
      using (SqlConnection connection = new SqlConnection(connectionString)) 
      { 
       connection.Open(); 
       queryString = "DELETE FROM wgcdoccab WHERE 'tipodoc' ='FSS' and 'FP' "; 
       SqlCommand command = new SqlCommand(queryString, connection); 
       command.Connection.Open(); 
       command.ExecuteNonQuery(); 
      } 
      using (SqlConnection connection = new SqlConnection(connectionString)) 
      { 
       connection.Open(); 
       queryString = "SELECT * from wgcdoccab where 'tipodoc' !='FSS' and !='FP' and contribuinte !='999999990' and datadoc != CONVERT(varchar(10),(dateadd(dd, -1, getdate())),120)"; 

       using (SqlCommand command = new SqlCommand(queryString, connection)) 
       using (SqlDataReader reader = command.ExecuteReader()) 
       { 
        if (reader.HasRows) 
        { 
         check = true; 
        } 
        else 
        { 
         check = false; 
        } 
       } 
      }   
     } 
     while (check); 
} 

一般我所編輯的代碼做的是:

  1. 添加using聲明,以便從釋放資源建立的連接。

  2. 您應該使用查詢執行中返回的類型。 ExecuteNonQuery()將返回受影響的行數,在我們的案例中,我們特別感興趣的是刪除查詢後從select語句返回的行。我們創建一個閱讀器,並根據行數,在我們的情況下,我們只關心是否有行或不符合分支。如果我們沒有從select中刪除任何行(所有內容都被刪除),我們繼續,如果我們什麼都沒有收到(reader.HasRows返回false),我們重複刪除查詢並再次檢查。 就這麼簡單。

+1

不要轉儲固定代碼。解釋有什麼錯誤以及你如何解決它。 – CodeCaster

+1

是的,如果你能解釋你如何解決問題,那麼通過解決方案來解決問題會幫助我學到很多東西,正如我所說的那樣,我對編程場景感興趣,並且如果問題出錯了,我也表示歉意。 – LesterNotTheMolestor

+0

我對我提出的解決方案試圖實現的內容添加了一些評論。希望你找到足夠清楚的。你明白嗎?萊斯特不是莫爾斯托爾? – Gnqz