不能在我的代码中隐式地将类型'string'转换为'int'

时间:2014-08-09 20:36:04

标签: c#

我试图将电子邮件发送到我的数据库中的多个电子邮件地址。我的代码如下所示

 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'

2 个答案:

答案 0 :(得分:2)

myReader.GetValue(i).ToString()不返回整数,它返回一个字符串,因此,您需要将email定义为string

int i = 0;
string email = string.Empty;

由于所有不同的邮件变量,这可能是一个错误,请尝试使用更好的变量名称。

此外,您的代码不会正确递增i,而是保持不变。只需i++;而不是i = i + 1 - 1;

答案 1 :(得分:-2)

  1. 当你不知道用string,int,char等声明你的变量时,不要担心,只需输入“var”并允许C#选择它的类型,我的朋友:)

  2. 在C#中,字符串无法隐式转换为int,您应该使用此函数显式执行此操作:Convert.ToInt32(your string variable or your string with quotation mark);

  3. 当您想向多个收件人发送电子邮件时,我认为最好使用“BCC”(盲目复制)而不是“TO”,因为smtp.Send(mail);只运行一次

  4. 查看How to send the mail from c#