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
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
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
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