-1

あるクラスから別のクラスに値を渡すことはできません。試してみると、値は最初のクラスの値ではなく 0 に渡されます。

私はこれを持っています:人がデータベースにいるかどうかをチェックするメソッド、そして変数IDautorがデータベースにあるIDを取得し、if句に入力し、位置1の配列id2が値を保存しますIDautor...私はクラス Artigo でその値を使用するふりをしていますが、値は常に 0 であり、クラス 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に保存し、その値を別のクラスで使用しようとしている

クラスアルティゴ

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 になります。

4

3 に答える 3

1
Autor au = new Autor();

Authorこのコード行により、すべてのプロパティがデフォルト値に設定された新しいオブジェクトが作成されます。値を取得しようとする前に、そのオブジェクトでこれ以上何も呼び出さないidため、値は 0 です。

そのプロパティを作成することを検討する必要がありますstatic。これにより、その値が永続的になります。

于 2012-12-29T14:04:42.873 に答える
0

Authorオブジェクトを別のクラスに渡します。この作成者オブジェクトを使用して、uは値にアクセスできます。

Author _author = new Author();

int値=_author.id[1];

于 2012-12-29T14:51:45.133 に答える
0

Autor au = new Autor();を使用するのではなく、 のコンストラクターを変更してArtigoを受け入れ、Autorそれまたは一部のプロパティを のメンバーとして保存するか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);

いずれにせよ、ソリューションには複数の小さな問題があります ( array を持つことid2から、Loginメソッドを受け入れるメソッドTextBoxesArtigoそれ自体を追加する まで、おそらくコードはArtigoコンストラクターの一部としてより適しています)。

于 2012-12-29T15:01:50.680 に答える