2015-07-21 89 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