我无法将一个值从一个类传递给另一个类

时间:2012-12-29 14:00:23

标签: c#

我无法将一个值从一个类传递到另一个类,当我尝试时,该值传递给0而不是来自第一个类的值。

我有这个:一个方法,将检查该人是否在数据库中,并且变量IDautor将获得id在数据库上,它将输入if子句,然后位置1中的数组id2将保存来自IDautor的价值......我假装在Artigo类中使用该值,但价值始终为0,我不知道为什么 Class Autor

    public bool Login(TextBox txtUser, TextBox txtPassword)

    {

        string utl, pass;

        try
        {
            utl = txtUser.Text;
            pass = txtPassword.Text;

            _Sql = "Select Count(IDAutor) From Autor Where uUser = @uUser and Pass = @Pass";

            SqlCommand cmd = new SqlCommand(_Sql, Conn);

            cmd.Parameters.Add("@uUser", SqlDbType.VarChar).Value = utl;
            cmd.Parameters.Add("@Pass", SqlDbType.VarChar).Value = pass;

            Conn.Open();

            IDautor = (int)cmd.ExecuteScalar();                
            if (IDautor > 0)
            {
                MessageBox.Show("Bem Vindo");                        
                Conn.Close();
                id2[1] = IDautor;
                return true;
            }
            else
            {
                MessageBox.Show("Tera que tentar de novo");
                Conn.Close();
                return false;
            }                
        }
        catch(Exception ex)
        {
            MessageBox.Show("ERRO Message: "+ ex);
            Conn.Close();
            return false;
        }
    }



public int[] id2 
    {
        get { return this.id2; }
    }

并尝试将值保存在数组id2中并在另一个类中使用该值

Class Artigo

public string AddArtigo(string newArtigo)
   {
       if (newArtigo == null)
       {
           return "Nao selecionou o PDF desejado. Tente de novo";               
       }
       if (newArtigo != null)
       {
           using (FileStream st = new FileStream(newArtigo, FileMode.Open, FileAccess.Read))
           {
               SqlConnection Conn = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Users\Convidado1\Desktop\Aplicaçao C#\Aplicaçao\ITArtiConf\ITArtiConf\Database1.mdf;Integrated Security=True;User Instance=True");

               Autor au = new Autor();

               byte[] buffer = new byte[st.Length];
               st.Read(buffer, 0, (int)st.Length);
               st.Close();

               Conn.Open();
               SqlCommand cmd = Conn.CreateCommand();
               cmd.CommandText = "insert into Artigo (idAutor) values('" + au.id2[1] + "')";
               cmd.ExecuteNonQuery();
               Conn.Close();


               SqlCommand cmd1 = new SqlCommand("UPDATE SomeTable SET Artigo=@Artigo WHERE idAutor =" + au.id2[1], Conn);
               cmd1.Parameters.AddWithValue("@Artigo", buffer);
               Conn.Open();
               int i = cmd1.ExecuteNonQuery();
               Conn.Close();                   
           }
           return "Guardado";
       }

       return "Error";           
   }

au.id2 [1]变为0而不是另一个类的值。

3 个答案:

答案 0 :(得分:1)

Autor au = new Autor();

这行代码创建了新的Author对象,它将所有属性设置为默认值。在尝试获取id值之前,不要再对该对象调用任何内容,因此它的值为0.

您应该考虑制作该属性static,这将使其价值持久。

答案 1 :(得分:0)

作者对象传递给另一个类。 使用此Author对象,您可以访问值。

作者_author = new作者();

int value = _author.id [1];

答案 2 :(得分:0)

最好的方法是不使用Autor au = new Autor();而是更改Artigo的构造函数以接受Autor并将其保存为{{1}的成员或者更改Artigo的签名以接受AddArtigo

所以,要么:

Autor

Autor au = new Autor();    
au.Login(user, pass); // this should really accept strings and not TextBoxes...
Artigo art = new Artigo(au); // this saves id2[1] as a member somewhere
art.AddArtigo(newArtigo); // why does the Artigo class have an AddArtigo method?

无论哪种方式,您的解决方案都存在多个小问题(从拥有数组Autor au = new Autor(); au.Login(user, pass); Artigo art = new Artigo(); art.AddArtigo(newArtigo, au); 到接受id2的{​​{1}}方法和添加自身的Login,最有可能的代码更适合作为TextBoxes构造函数的一部分。)