使用检查数据 reader 中的空值更新 table

Update table using check null value from data reader

我在 tableemail 上的两列电子邮件和状态我使用数据 reader 来计算邮件地址和发送邮件:

>  OleDbCommand cmd = null;
>             OleDbCommand cmd2 = null;
>             
>             string queryString = "select email,status from tableemail";
>             using (OleDbConnection connection = new OleDbConnection("Provider = OraOLEDB.Oracle.1; Data Source = xe;
> Password=eppspps;User ID = xpress; unicode=true"))
>             {
>                 OleDbCommand command= new OleDbCommand(queryString, connection);
>                 connection.Open();
>                 cmd = new OleDbCommand(queryString);
>                 cmd.Connection = connection;
>                 OleDbDataReader reader = cmd.ExecuteReader();
>                
>                 while (reader.Read())
>                     
>                 {
>                     MailAddress to = new MailAddress(reader[0].ToString());
>                     message.To.Add(to);     
>                 }

此代码运行良好,但是
检查数据的空值后,我需要将状态数据更新到 tablemail reader

> if (!reader.IsDBNull(1))
>                 {
>                     cmd2 = new OleDbCommand(" UPDATE tableemail set status=1 where status is null", connection);
>                     cmd2.ExecuteNonQuery();
>                 }

我想你可以尝试只使用cmd来做selectupdate,然后删除if If(!reader.IsDBNull(1))并将update代码移到外部循环。

OleDbCommand cmd = null;

string queryString = "select email,status from tableemail";
using (OleDbConnection connection = new OleDbConnection("Provider = OraOLEDB.Oracle.1; Data Source = xe;
 Password=eppspps;User ID = xpress; unicode=true"))
{
 OleDbCommand command= new OleDbCommand(queryString, connection);
 connection.Open();
 cmd = new OleDbCommand(queryString);
 cmd.Connection = connection;
 OleDbDataReader reader = cmd.ExecuteReader();

 while (reader.Read()) 
 {
     MailAddress to = new MailAddress(reader[0].ToString());
     message.To.Add(to);     
 }
  cmd.CommandText = " UPDATE tableemail set status=1 where status is null";
  cmd.ExecuteNonQuery();
}

编辑

如果你想在 while 循环中使用 update 你可以尝试使用另一个 OleDbCommand 并在 if

中执行更新
string queryString = "select email,status from tableemail";
string updateString = "UPDATE tableemail set status=1 where email = @email";
using (OleDbConnection connection = new OleDbConnection("Provider = OraOLEDB.Oracle.1; Data Source = xe;
 Password=eppspps;User ID = xpress; unicode=true"))
{
 connection.Open();
 OleDbCommand cmd = new OleDbCommand(queryString,Connection);
 OleDbCommand cmd2 = new OleDbCommand(updateString,Connection);
 OleDbDataReader reader = cmd.ExecuteReader();

 while (reader.Read()) 
 {
     MailAddress to = new MailAddress(reader[0].ToString());
     message.To.Add(to);     
     if(!reader.IsDBNull(1)){
         cmd2.Parameters.Clear();
         cmd2.Parameters.Add(new OleDbParameter("email", reader["email"]));
         cmd2.ExecuteNonQuery();
     }
  }
}