Laden...

Forenbeiträge von Maendler53 Ingesamt 5 Beiträge

04.11.2022 - 10:46 Uhr

Morgen an alle

Fehlermeldung:
"Der angegebene Assemblyname oder die Codebasis ist ungültig. (Ausnahme von HRESULT: 0x80131047)" 👎

Dies Fehlermeldung komm nach dem setzen eines Verweises auf ein eingebundenes Projekt, siehe Error.png

Leider kann ich mit diser Fhlemeldung so gar nicht anfangen. -🙂)

Gruss Alex

26.10.2022 - 09:44 Uhr

Danke Alf

Mit den variabeln von, bis wurder der fehler auch geworfen:

Nach dem Boxing:

var von = Ws.CurrentSheet.Cells[firstRow, firstCol]as Exc.Range;
var bis = Ws.CurrentSheet.Cells[lastRow, lastCol] as Exc.Range;

läufte es nun tadellos!

Gruss Alex

25.10.2022 - 08:38 Uhr

Hallo Leute,

Ich habe folgendes Problem:

Wenn ich folgenden Code aufrufe:


 internal static void CellsMerge(string address)
        {
            string[] splited = address.Split(Convert.ToChar(":"));
            int firstCol;
            int firstRow = Cvr.GetIndexes(splited[0], out firstCol);
            int lastCol;
            int lastRow = Cvr.GetIndexes(splited[1], out lastCol);

            Exc.Range rng = Ws.CurrentSheet.Range[Ws.CurrentSheet.Cells[firstRow, firstCol], Ws.CurrentSheet.Cells[lastRow, lastCol]] as Exc.Range; // Beim erstellen des Rangeobjekt, entsteht der Fehler.  Die Felder firstCol, firstRow, lastCol und lastRow sind  entsprechend Excel 1 basiert und richtig initialisiert.
            rng.Merge(Type.Missing);

        }

Fehlermeldung:

Index was outside the bounds of the array

Auch nach intensivem suchen, konnte ich keine Lösung finden. Die in den meisten Beispielen benutzte get_Range-Methode ist Obsolet und neuere Beispiele selten!

LG Alex

24.08.2021 - 10:01 Uhr

Ist wohl am falsechen Ort gelandet!

24.08.2021 - 09:47 Uhr

Ein schönes Hallo an alle Experten

Ich programiere eine Klasse<T> (wobie T immer ein DataTrnsferObject ist) welech mir den Zugriff auf eine DB bezwecks eine derer Tabellen automatisiert und folgende Funktioenen beinhaltet: get ObservableCollection<T>, void T Insert(T item), void Update(T item) und void Delete(T item). Die Funktioen Inser, Update und Delete sind gelöst. Nur die Funktion get ObservableCollection<T> ist noch nicht zufriedenstellend glöst.

Nun zum Problem:
Um dem Item<T> Werte zu zuweisen benutze ich die Klasse BindItem nach dem Beispeil: Binder Class in welcher ich noch die nicht primitiven Typen implementiert habe.

Um die Daten von get ObservableCollection<T> aufzubereiten benuze ich den privaten void AddData().


private void AddData()
        {
            // Erzeugen des SelectSql
            // _tableInfos (readOnly) enthalten die ColumnIndexes und ColumnNames 
            // _parameterItem (readOnly) enthaletn: TableName, PropertyName (der Name der Property die bei GetMethod( Paramerer name benötigt wird) und die ParametetTypen

            var sb = new StringBuilder("SELECT ");
            foreach (var colInfo in _tableInfos) sb.Append($"{colInfo.ColunName}, ");
            sb.Remove(sb.ToString().Length - 2, 2);
            sb.Append($" FROM {_parameterItem.TableName}");


            // SqlComand erstellen
            using (var cmd = new SqlCommand(sb.ToString(), sqlConnection))
            {
                if (sqlConnection.State.Equals(ConnectionState.Closed)) sqlConnection.Open();

                
                using (var rdr = cmd.ExecuteReader())
                { 
                    // Daten aus Tebelle auslesen
                    while (rdr.Read())
                    {
                        var data = new object[_parameterItem.ParameterTypes.Length];

                        for (int i = 0; i < rdr.FieldCount; i++)
                        //for (int i = 0; i < 1; i++)
                        {
                            var obj = rdr.GetValue(i);

                            // Wenn Type von obj ungleich und PropertyType, ist der Typ von obj entsprechen zu wandeln
                            if (!itemInfos[i].PropertyType.Equals(obj.GetType()))
                            {
                                if (obj.GetType() == typeof(int)) obj = BooleanConverter.IntToBool((int)obj);
                                else if (obj.GetType() == typeof(decimal)) obj = Convert.ToDouble(obj);
                                else if (obj.GetType() == typeof(DBNull)) obj = null;
                                else throw new Exception("PropertyTypeException", new Exception("Der gewünschte Typ ist noch nicht implementier"));
                            }
                            data[i] = obj;
                        }

                        var instance = Activator.CreateInstance(typeof(T));

                        // GetMethod wirft keine Exception, sondern git null zurück
                        MethodInfo method = typeof(T).GetMethod(_parameterItem.PropertyName, BindingFlags.Public | BindingFlags.Instance, new BindItem(), _parameterItem.ParameterTypes, null);
                        // Wenn T = FoodDTO ist method nicht null, weil die Klasse SelectMethod ausgeführt wird.
                        // Wenn T = EmployerDTO ist method null, weil die Klasse SelectMethod nicht ausgeführt wird. Wobei _parameterItem.ParameterTypes auf ein Int32 reduziert wurde und die Funktion (AddItemValues) auch nur ein Parameter erwatet.

                        if (method.Equals(null)) throw new Exception("ParameterTypeExzeption", new Exception("Fehler bei der Ahnzal,  der ParameterTypen, oder Untiimmigkeiten zwischen dem parameterisierten Konstrucktor und den zu serialisierenden Parametertypen"));

                        method.Invoke(instance, BindingFlags.InvokeMethod, new BindItem(), data, CultureInfo.CurrentCulture);

                        observableCollection.Add((T)Convert.ChangeType(instance, typeof(T)));

                    }
                }

                if (sqlConnection.State.Equals(ConnectionState.Open)) sqlConnection.Close();

            }
        }

Ich hoffe das die Komentare im void AddDate() aussagekräftig genug sind.

Das DataTranserObject das mit nicht null ausgeführt wird:


 [Serializable]
    public class FoodDTO
    {
        public FoodDTO() { }

        public FoodDTO(int id, string name, bool isAvalaible)
        {
            ID = id;
            Name = name;
            IsAvalaible = isAvalaible;
        }

        public void AddItemValues(int id, string name, bool isAvalaible)
        {
            ID = id;
            Name = name;
            IsAvalaible = isAvalaible;
        }

        public int ID { get; set; }
        public string Name { get; set; }
        public bool IsAvalaible { get; set; }
        public static string PropertyName { get => "AddItemValues"; }
    }

Das DataTranserObject das mit null ausgeführt wird:


[Serializable]
    public class EmployerDTO : ICopy<EmployerDTO>
    {
        public EmployerDTO() { }

        public EmployerDTO(string fullName, string position, DateTime birstDay, double salery, string coment, string imagePaht = null, 
             int id = -1)
        {
            ID = id;
            EmployerName = fullName;
            Position = position;
            BirstDay = birstDay;
            Salery = salery;
            Coment = coment;

            if (imagePaht != null) Image = ConvertImagesToBytes.ConvertFromFilePath(imagePaht);
        }

        public void AddItemValues(int id)
        {
            ID = id;
            //EmployerName = fullName;
            //Position = position;
            //BirstDay = birstDay;
            //Salery = salery;
            //Coment = coment;
            //Image = imageBytes;
        }

        public int ID { get; set; }
        public string EmployerName { get; set; }
        public string Position { get; set; }
        public DateTime BirstDay { get; set; }
        public double Salery { get; set; }
        public string Coment { get; set; }
        public byte[] Image { get; private set; }
        public int Age { get => DateTime.Now.Year - BirstDay.Year; }
        public EmployerDTO GetCopy { get=> DeepCopy.Copy(this); }


        public override bool Equals(object obj)
        {
            return ID == (obj as EmployerDTO).ID;
        }

        public override int GetHashCode()
        {
            return ID.GetHashCode();
        }

        public static string GetPropertyName { get => "AddItemValues"; }
    }

Herzliche Grüsse aus der Schweiz Mäendler53