Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用数据读取器中的check null值更新表_C#_Loops_While Loop_Sqldatareader - Fatal编程技术网

C# 使用数据读取器中的check null值更新表

C# 使用数据读取器中的check null值更新表,c#,loops,while-loop,sqldatareader,C#,Loops,While Loop,Sqldatareader,我的两栏电子邮件和表格上的状态电子邮件我使用数据读取器计算邮件地址和发送邮件: > OleDbCommand cmd = null; > OleDbCommand cmd2 = null; > > string queryString = "select email,status from tableemail"; > using (OleDbConnection c

我的两栏电子邮件和表格上的状态电子邮件我使用数据读取器计算邮件地址和发送邮件:

>  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

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

我认为您可以尝试只使用
cmd
执行
选择和
更新
,并删除if
if(!reader.IsDBNull(1))
并将
更新
代码移动到外部循环

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();
     }
  }
}

问题是什么?无关提示:命令和读取器都是可识别的,因此它们都应该位于
using
块中。您尚未解释问题,但我怀疑您需要在执行其他命令之前完成第一个命令。只需保留一个要更新的内容列表,并在命令完成后进行更新。我可以使用cmd check with reader value进行更新?在重新读取时,您的更新不会使用来自reader的值,因此更简单:您不需要跟踪任何内容。只要把我提到的
using
块放进去,然后把
cmd2
放在
using
块后面,用于
cmd
。如果不行,请回答问题以澄清问题所在。是否可以在更新过程中使用数据读取器值进行检查??是的,但是否有任何列是
PK
您可以通过PK更新数据。如果我将电子邮件列中的PK设置为PK,我如何更新它?您只需要使用
update
列并确保此数据不会重复。如果您的电子邮件在您的表中没有重复,您可以使用它。实际上,在电子邮件地址下插入新信息时,发送自动邮件需要更新,我希望处于更新状态,邮件已全部就绪发送我正在使用数据读取器发送邮件,并且我希望成为更新数据读取器值