2016-11-06 6 views
0
string connString = ConfigurationManager.ConnectionStrings["TestDatabase"].ConnectionString; 
SqlConnection conn = new SqlConnection(connString); 
try 
{ 
    conn.Open(); 
    string cmdUpdate = "UPDATE mem SET name [email protected]"; 
    string cmd = "SELECT * FROM mem;"; 
    SqlCommand comm = new SqlCommand(cmd, conn); 
    SqlCommand commUpdate = new SqlCommand(cmdUpdate, conn); 
    SqlDataReader dr = comm.ExecuteReader(); 
    while (dr.Read()) 
    { 
     DateTime date = DateTime.ParseExact(dr["date"].ToString(), "dd-MM-yyyy", CultureInfo.InvariantCulture); 
     if (date < DateTime.UtcNow) 
     { 
      commUpdate.Parameters.Clear(); 
      commUpdate.Parameters.AddWithValue("@name", "Done"); 
      comm.ExecuteNonQuery(); 
     } 
    } 
    conn.Close(); 
} 
catch (Exception ex) { 
    MessageBox.Show(ex.ToString()); 
} 

これは私のコードです。selectコマンドのループ中にテーブルを更新するには?

<connectionStrings> 
    <add name="TestDatabase" connectionString="Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\Test.mdf;Integrated Security=True;MultipleActiveResultSets=True;" providerName="System.Data.SqlClient"/> 
</connectionStrings> 

これは私の接続文字列です。

データを取得して条件を一致させながら名前を更新したいと考えています。誰でも助けてくれますか?

+1

変更元:comm.ExecuteNonQuery(); to:commUpdate.ExecuteNonQuery(); – jdweng

答えて

0

ExecuteReaderを呼び出して、結果がHasRowsを使用していることを確認します。ループの各反復でパラメータを追加/クリアするのではなく、パラメータを一度作成し、次に示すように再利用します。最後に、SELECT * FROMではなく、必要なフィールドだけを選択するのが良い方法です。

public class Demo 
{ 
    public void Example() 
    { 
     string connString = ConfigurationManager.ConnectionStrings["TestDatabase"].ConnectionString; 
     SqlConnection conn = new SqlConnection(connString); 
     try 
     { 
      conn.Open(); 
      string cmdUpdate = "UPDATE mem SET name [email protected]"; 
      string cmd = "SELECT * FROM mem;"; 
      SqlCommand comm = new SqlCommand(cmd, conn); 
      SqlCommand commUpdate = new SqlCommand(cmdUpdate, conn); 
      SqlDataReader dr = comm.ExecuteReader(); 
      if (dr.HasRows) 
      { 
       comm.Parameters.Add(new SqlParameter() { ParameterName = "@name", DbType = System.Data.DbType.String }); 
       while (dr.Read()) 
       { 
        DateTime date = DateTime.ParseExact(dr["date"].ToString(), "dd-MM-yyyy", CultureInfo.InvariantCulture); 
        if (date < DateTime.UtcNow) 
        { 
         commUpdate.Parameters["@name"].Value = "Done"; 
         comm.ExecuteNonQuery(); 
        } 
       } 
       conn.Close(); 
      } 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show(ex.ToString()); 
     } 

    } 
} 
関連する問題