我试图将电子邮件发送到我的数据库中的多个电子邮件地址。我的代码如下所示
private void button1_Click(object sender, EventArgs e)
{
ArrayList list_emails = new ArrayList();
int i=0,email = 0;
String condata = "data source =(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))(CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = XE))); user id = myuser; password = myuser";
String qry = "select emailid from emailmachin";
OracleConnection con = new OracleConnection(condata);
OracleCommand cmd = new OracleCommand(qry, con);
OracleDataReader myReader;
try
{
con.Open();
myReader = cmd.ExecuteReader();
while (myReader.Read())
{
email = myReader.GetValue(i).ToString();
list_emails.Add(email); //Add email to a arraylist
i = i + 1 - 1; //increment or ++i
//string emailIdc = myReader["emailid"].ToString();
//textBoxTo.Text = emailIdc;
myReader.Close();
con.Close();
foreach (string email_to in list_emails)
{
MailMessage mail = new MailMessage();
mail.To.Add(email_to);
mail.Subject = "Welcome to C#";
mail.From = new MailAddress(hold_Account);
mail.Body = "Test";
SmtpClient smtp = new SmtpClient("SMTP Server");
smtp.Send(mail);
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
在此代码行email = myReader.GetValue(i).ToString();
中显示错误:
无法将类型'string'隐式转换为'int'
答案 0 :(得分:2)
myReader.GetValue(i).ToString()
不返回整数,它返回一个字符串,因此,您需要将email
定义为string
。
int i = 0;
string email = string.Empty;
由于所有不同的邮件变量,这可能是一个错误,请尝试使用更好的变量名称。
此外,您的代码不会正确递增i
,而是保持不变。只需i++;
而不是i = i + 1 - 1;
答案 1 :(得分:-2)
当你不知道用string,int,char等声明你的变量时,不要担心,只需输入“var”并允许C#选择它的类型,我的朋友:)
在C#中,字符串无法隐式转换为int,您应该使用此函数显式执行此操作:Convert.ToInt32(your string variable or your string with quotation mark);
当您想向多个收件人发送电子邮件时,我认为最好使用“BCC”(盲目复制)而不是“TO”,因为smtp.Send(mail);
只运行一次