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
执行选择和更新
,并删除ifif(!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
列并确保此数据不会重复。如果您的电子邮件在您的表中没有重复,您可以使用它。实际上,在电子邮件地址下插入新信息时,发送自动邮件需要更新,我希望处于更新状态,邮件已全部就绪发送我正在使用数据读取器发送邮件,并且我希望成为更新数据读取器值