簡體   English   中英

在C#中設置變量的麻煩

[英]trouble setting variables in C#

我在變量FaxProEmailProFaxStatEmailStat上收到錯誤。

while (reader.Read())
{
    string CustNo = reader["CUSTNO"].ToString();
    string Phone = reader["PHONE"].ToString();
    string Fax = reader["FAX"].ToString();
    string Email = reader["PRI_EMAIL"].ToString();
    string Type = reader["TYPE"].ToString();

    if (Type.Contains("H"))
    {
        if (Type.Contains("F"))
        {
            string FaxStat = "Y";
            string FaxPro = "PENDING";
        }
        else
        {
            string FaxStat = "N";
            string FaxPro = "NONE";
        }
        if (Type.Contains("E"))
        {
            string EmailStat = "Y";
            string EmailPro = "PENDING";
        }
        else
        {
            string EmailStat = "N";
            string EmailPro = "NONE";
        }
//outbox
// id, account, type, title, number, fax, email, faxpro, emailpro, faxstat, emailstat, filepath, datesent

        MySqlCommand mycommand = new MySqlCommand("INSERT INTO outbox (id, account, type, title, number, fax, email, faxpro, emailpro, faxstat, emailstat, filepath, datesent) VALUES('0','" + CustNo + "', 'CUSTOMER', 'test', '" + Phone + "', '" + Fax + "', '" + Email + "', '" + FaxPro + "', '" + EmailPro + "', '" + FaxStat + "', '" + EmailStat + "', 'test', NOW())", conn);
  mycommand.ExecuteNonQuery();

錯誤是:

名稱'FaxPro'在當前上下文C:... \\ Form2.cs中不存在

...依此類推,適用於EmailProFaxStatEmailStat

在函數的開頭聲明字符串,因此它們始終具有作用域。 此刻,您在if/else語句塊中聲明了FaxPro, EmailPro, FaxStat, EmailStat ,並且一旦該塊結束,它們就會超出范圍。

通過在函數開始時聲明一次,您將避免在while循環中多次聲明它們。

//small example
public void myFunc()
{
    string CustNo, Phone, Fax, Email, Type, FaxStat, FaxPro, EmailStat, EmailPro;

    //set up query and reader
    //...
    while(reader.read())
    {
         CustNo = reader["CUSTNO"].ToString();
         //etc.
    }
    //reader.close(); conn.close();
}
while (reader.Read())
{
    string CustNo = reader["CUSTNO"].ToString();
    string Phone = reader["PHONE"].ToString();
    string Fax = reader["FAX"].ToString();
    string Email = reader["PRI_EMAIL"].ToString();
    string Type = reader["TYPE"].ToString();
    // Declare your variables here
    string FaxStat, FaxPro, EmailStat, EmailPro;

    if (Type.Contains("H"))
    {
        if (Type.Contains("F"))
        {
            FaxStat = "Y";
            FaxPro = "PENDING";
        }
        else
        {
            //...
            //...

變量的聲明超出范圍。 它們在if語句中聲明。 將聲明移至如下所示的外部作用域:

while (reader.Read()) 
{ 
    string CustNo = reader["CUSTNO"].ToString(); 
    string Phone = reader["PHONE"].ToString(); 
    string Fax = reader["FAX"].ToString(); 
    string Email = reader["PRI_EMAIL"].ToString(); 
    string Type = reader["TYPE"].ToString(); 

    string FaxStat = string.Empty;
    string FaxPro = string.Empty;
    string EmailStat = string.Empty; 
    string EmailPro = string.Empty; 
    if (Type.Contains("H")) 
    { 
        if (Type.Contains("F")) 
        { 
            FaxStat = "Y"; 
            FaxPro = "PENDING"; 
        } 
        else 
        { 
            FaxStat = "N"; 
            FaxPro = "NONE"; 
        } 
        if (Type.Contains("E")) 
        { 
            EmailStat = "Y"; 
            EmailPro = "PENDING"; 
        } 
        else 
        { 
            EmailStat = "N"; 
            EmailPro = "NONE"; 
        } 
        //outbox 
        // id, account, type, title, number, fax, email, faxpro, emailpro, faxstat, emailstat, filepath, datesent 

        MySqlCommand mycommand = new MySqlCommand("INSERT INTO outbox (id, account, type, title, number, fax, email, faxpro, emailpro, faxstat, emailstat, filepath, datesent) VALUES('0','" + CustNo + "', 'CUSTOMER', 'test', '" + Phone + "', '" + Fax + "', '" + Email + "', '" + FaxPro + "', '" + EmailPro + "', '" + FaxStat + "', '" + EmailStat + "', 'test', NOW())", conn); 
        mycommand.ExecuteNonQuery(); 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM