Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Portal
  • |
  • Mitglieder
Beiträge von Yellow
Thema: DLL verwenden unter Excel
Am im Forum: Rund um die Programmierung

hallo Larsen,

entferne einfach folgende Zeile:


[InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]

dann sieht der Code so aus und müsste funktionieren


using System;
using System.Collections.Generic;
using System.Text;
using System.Xml ;
using System.Xml.XPath;
using System.Runtime.InteropServices;

namespace LarsLib
{
    [ComVisible(true)]
    [Guid("39446dd4-f29b-4726-8937-5eba4bc417e4")]
    public interface ILarsTest
    {
        [DispId(1)]
        void LoadData(string Path);
        [DispId(2)]
        string GiveValue(string DataType, string DataName, string Data);
        [DispId(3)]
        string GiveEepValue(string DataType, string EepFeature, string DataName, string Data);
        [DispId(4)]
        int TypeCnt(string Type);
        [DispId(5)]
        int TypeCntEEP(string Feature);

    }

    [ComVisible(true)]
    [Guid("bb5aba28-3339-4afa-ac13-02157a2c458e")]
    [ClassInterface(ClassInterfaceType.None)]
    [ProgId("LarsLib.LarsTest")]
    public class LarsTest : ILarsTest
    {   

        public void LoadData(string Path){
	...
        }
        public int TypeCnt(string Type)
        {
	...
        }
        public int TypeCntEEP(string Feature)
        {
	...          
        }

        public string  GiveValue(string  DataType, string DataName, string Data){
	...
        }

        public string GiveEepValue(string DataType,string EepFeature ,string DataName, string Data)
        {
	...
        }
    }
}

wie oben bereits geschrieben, widersprechen sich ClassInterfaceType.None und ComInterfaceType.IsIDispatch

-yellow

Thema: DLL verwenden unter Excel
Am im Forum: Rund um die Programmierung

hallo Larsen,

ich vermute es hängt mit den Attributen ClassInterfaceType.None und ComInterfaceType.IsIDispatch zusammen.

Versuchst du die DLL über späte Bindung einzubeziehen? ClassInterfaceType.None untersagt das nämlich, hier müsstest du vermutlich AutoDispatch anstatt None angeben.

Wenn du die DLL in die Verweise aufnehmen willst, sollte es gehen wenn du beim Interface das Attribut ComInterfaceType.IsIDispatch weglässt, den dieses veranlasst, dass deine Schnittstelle für COM als Dispatchschnittstelle offen gelegt wird, wodurch nur spätes Binden ermöglicht wird.

-yellow

EDIT: nachtrag ;o)

Thema: DLL verwenden unter Excel
Am im Forum: Rund um die Programmierung

Zitat
Original von Larsen
Trotzdem funktioniert die Benutzung auf dem anderen Rechner nicht.
Muß ich die DLL irgendwie speziell registrieren oder irgendwas zusätzlich angeben?

Kann mir jemand sagen was ich machen muß, damit das auch auf anderen Rechnern funktioniert?
(.NET Framework ist natürlich installiert)
ja, du musst die dll auf dem anderen Rechner registrieren. Bei einer .NET DLL geht das aber nicht mit regsvr sondern mit dem tool regasm welches beim .NET Framework dabei ist.
Zitat
Original von Larsen
Also der Verweis in VBA klappt, die Methoden sind durch IntelliSense zu sehen aber beim durchlauf bekomme ich folgenden Fehler:
"Objekterstellung durch ActiveX-Komponente nicht möglich"
Wenn du ein Interface nutzt und dort die DispID's vergeben hast und die GUID manuell vergeben hast, sollte das nicht passieren, außer du änderst das Interface. Wenn nicht, musst du bei jeder Änderung bzw. neuem Kompilieren deines .NET Codes die DLL neu registrieren, was sehr lästig ist.
Zitat
Original von Larsen
Woher bekomme ich diese Guid die ich verwenden muß?
die kannst du frei erfinden, sie dient ja nur dazu die DLL eindeutig zu identifizieren (classID). In Visual Studio Prof. gibt es ein nützliches Tool welches dir eine Guid erstellt die du über die Zwischenablage einfügen kannst, du kannst aber auch über

Console.WriteLine(System.Guid.NewGuid());
dir eine Guid auf der Konsole ausgeben lassen.

-yellow

Thema: DLL verwenden unter Excel
Am im Forum: Rund um die Programmierung

hallo Larsen,

schau mal hier sind zwei Threads in denen du die Lösung zu deinem Problem findest:

COM Interface für die eigene Applikation
C# DLL in VB6

-yellow

EDIT: Link ausgetauscht ;o)

Thema: Objekt-Datenbank
Am im Forum: Datentechnologien

Zitat
Original von thepaul
Meine Frage: Wenn man hier im Forum guckt, benutzt der Großteil relationale Datenbanken. Warum nimmt man nicht die Objekt-datenbank, womit "alles" einfacher und schneller geht?

hallo thepaul,

wenn du das Objekt so verwenden kannst wie du es in die Datenbank schreibst mag das sicher stimmen. Ich selbst bin mit Objektdatenbanken noch nicht in Berührung gekommen, aber ich denke sobald du dich nicht mit dem einen Objekt begnügen kannst, sondern andere Objekte in Abhängigkeit von diesem Objekt abfragen möchtest oder beispielsweise eine Summe über eine Auswahl von Objekten bilden möchtest, bist du über eine relationale Datenbank schneller.

Das ist meine Vermutung, da ich aber wie gesagt nicht mit Objektdatenbanken arbeite, bzw. auch nicht meine relationalen Daten auf Objekte mappe, kann ich keine gesicherte Auskunft geben

-yellow

Thema: Middleware und andere Business-Software
Am im Forum: Rund um die Programmierung

Zitat
Original von Rainbird
Das Argument mit dem verteilen der Client-Anwendung stimmt eigentlich nicht. Das .NET Framework ermöglicht das laden bzw. nachladen von Assemblies übers Netzwerk (http). Man kann also auch eine normale Fensteranwendung betreiben, ohne sie auf irgendeinem Client installieren zu müssen.

Und doch benötigst du hier irgend eine in .NET geschriebene Anwendung, die dir die Assemblies nachlädt...

-yellow

Thema: DataView als neues DataSet
Am im Forum: Datentechnologien

hallo diana,

du deklarierst in deiner for-schleife für jede Row in deiner View ein neues DataSet, eine neue DataTable... usw... daher wird da nie mehr als der letzte Datensatz drinnen stehen können. Du müsstest diese Deklarationen außerhalb der for-Schleife machen.

Wie FZelle bereits vermutete glaube ich auch, dass es bereits an der herangehensweise an das Problem liegt. Wenn ich ehrlich bin, habe ich auch noch nicht ganz deine Absicht verstanden, könntest du mir noch etwas ausführlicher schildern was du vorhast? gerne auch als pn.

-yellow

Thema: DataView als neues DataSet
Am im Forum: Datentechnologien

Zitat
Original von diana
Ich kann nur auf die Quelltabelle zugreifen, aber die gibt mir nicht die Daten des Views zurück, sondern die Quelldaten.

Wenn du die Quelltabelle nicht verwenden kannst, und auf 1.1 angewiesen bist, und dennoch eine DataTable mit den Daten aus der View erzeugen möchtest, bleibt dir meiner Meinung nach nichts anderes als diese Tabelle manuell zu erstellen, und für jede DataViewRow eine DataRow (for each) in der manuell erzeugten Tabelle einzufügen.

-yellow

Thema: Versionsnummer vergeben
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

hallo Xqgene,

Zitat
Original von Xqgene
nun ich habe mich schon immer gfragt, warum in .net die Revisionsnummer an letzter Stelle steht?

die Antwort fällt bestimmt so ähnlich aus wie auf die Frage: Wie viele Microsoft-Mitarbeiter braucht man, um eine Glühbirne zu wechseln?

-yellow

Thema: DataView als neues DataSet
Am im Forum: Datentechnologien

hallo diana,

das DataView stellt eine datenbindungsfähige, angepasste Ansicht einer DataTable zum Sortieren, Filtern, Durchsuchen, Bearbeiten und Navigieren dar. Du kannst daher die zugrunde liegende DataTable dem DataSet zuweisen.

-yellow

Thema: DataSets aktuell halten / Postgres
Am im Forum: Datentechnologien

hallo svenson,

das ich mich im Code um die Vergabe des AutoIncrements nicht scheren muss ist mir schon klar. Das Unschöne ist, wie bereits oben beschrieben, dass ich nicht automatisch temporäre negative Primärschlüssel erzeugt werden, wenn in der Tabelle bereits Datensätze enthalten sind. Dann zieht er einfach vom höchsten Schlüssel den in AutoIncrementStep gespeicherten Wert ab, der eventuell bereits in Tabelle vorhanden ist und so beim Hinzufügen eine Exception wirft.

Sinn macht es die DataTable mit dem von der DB generierten Primärschlüssel zu aktualisieren, weil ich die Datensätze auch für Master-/Detail Beziehungen weiter benutzen möchte, ohne den Datensatz neu aus der Datenbank abzurufen.

-yellow

Thema: Migration SQL Server 2005 zu 2000
Am im Forum: Datentechnologien

hallo canuck,

wenn es sich um den MS SQL Server 2000 handelt, kann ich dir nur Enterprise Manager und den Query Analyzer ans Herz legen, die sind beim Server bereits enthalten (nicht bei der MSDE). Wie es allerdings hinsichtlich Migration aussieht, dazu muss ich auf Grund mangelnder Erfahrung, passen.

-yellow

Thema: Datenbankeinstieg, Hilfe benötigt
Am im Forum: Datentechnologien

hallo saschap,

wenn es sich um ein kleines Verständnisproblem handelt, könnte es durchaus daran liegen, dass du mit ADO.NET noch nicht vertraut bist. Schau Dir hierzu folgenden Link an: Visual C# 2005 - ADO.NET Dort wirst du einen guten Überblick über die Technologie erhalten.

-yellow

Thema: .net 1.1 auf .net 2.0 ???
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Schau dir doch zumindest die Express-Versionen an, für viele Anwendungen sind sie völlig ausreichend...

Visual C# 2005 Express Edition

-yellow

Thema: .net 1.1 auf .net 2.0 ???
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

hallo Andregolas,

soweit ich weiss lautet die Antwort: nein, VS ist fest mit dem jeweiligen .NET Framework verdrahtet.

-yellow

Thema: T-SQL - WHERE Klausel mit CASE + Unterabfrage
Am im Forum: Datentechnologien

hallo noodles,

ich hab's aus Interesse eben auch mal ausprobiert. Eine Unterabfrage in der Konstellation müsste schon möglich sein, denn wenn du deine Subquery über eine WHERE-Klausel einschränkst, so dass sie nur einen Wert zurückgibt, funktioniert es (genau wie die 3 anstatt der Subquery).

Es liegt also eher an der CASE-Anweisung, die Probleme hat, mehrere Werte zu verarbeiten. Was hier aber der Unterschied zu einer normalen Subquery ist, würde mich auch interessieren.

-yellow

Thema: Nächste verfügbare ID der Datenbanktabelle prüfen
Am im Forum: Datentechnologien

Zitat
Original von .unreal
lies vor allem den link von svenson, der ist genau das, was du suchst!

genau den habe ich gemeint, und Unikum scheint ihn auch gefunden zu haben ;o).

-yellow

Thema: Filterung der Daten von Abfragen
Am im Forum: Datentechnologien

jein.

du verwendest den OLE-Namespace und müsstest bei dem Umstieg auf MS SQL Server die entsprechendne Klassen durch die aus dem Namespace SqlClient austauschen. Eine bessere alternative wäre die in .NET 2.0 neu hinzugekommenen Klassen aus dem Namespace System.Data.Common zu verwenden.

-yellow

Thema: Filterung der Daten von Abfragen
Am im Forum: Datentechnologien

hallo Pako,

dann schau mal hier nach: Visual C# 2005 - Kapitel 26, dort solltest du finden was du suchst.

Alternativ könntest du im Forum nach Stichwörtern wie "stored procedure" usw. suchen, da wirst du sicher jede Menge Beispiele finden.

-yellow

Thema: Nächste verfügbare ID der Datenbanktabelle prüfen
Am im Forum: Datentechnologien

hallo Unikum,

doch, das kann der DataAdapter. In diesem Thread findest Du einen Link unter dem erklärt wird wie es geht.

-yellow

Thema: Schell über C# erstellen?
Am im Forum: Rund um die Programmierung

hallo mausch,

ich kann mich nitronic nur anschließen. Besonders die automatische Typ Konvertierung und der Datentyp Variant sind mir ein Dorn im Auge. Ich habe selbst mit VB begonnen und bin der Meinung es gehört verdammt viel Disziplin dazu, um in VB 6 sauberen und einfach wartbaren Code zu schreiben.

Welche Dinge fehlen dir denn im .NET Framework die es in VB 6 gab? Wie nitronic erwähnte könnte es durchaus sein, dass sie nur gut im Framework versteckt sind und Dir hier jemand helfen kann sie zu finden.

-yellow

Thema: DataSets aktuell halten / Postgres
Am im Forum: Datentechnologien

Zitat
Original von .unreal
@Yellow: Ich verstehe nicht, warum du nicht einfach autoincrement verwendest. Ob du nun die Keys über deine Tabelle erstellst, oder per Autoincrement spielt keine Rolle und löst das Problem, welches im Link beschrieben wird, nicht.

hallo .unreal,

ich verwende ja autoincrement (siehe beispiel-code ;o))... nur der neue autoincrement-schlüssel wird, außgehend vom letzten schlüssel um 1 verringert. das ist ja das problem. würde er, wie ich es gerne haben würde, ausgehend von -1 um eins verringert wäre das so wie ich es mir wünschen würde.

-yellow

Thema: DataSets aktuell halten / Postgres
Am im Forum: Datentechnologien

hallo allerseits,

ich komme für ein Projekt nicht drumherum und muss mit Tabellen mit AutoIncrement-Schlüsseln arbeiten. Dabei habe ich etwas unschönes beim Verwenden von AutoIncrementSeed festgestellt. Wenn ich jetzt den Code von alex-abc als Beispiel nehme:

Zitat
Original von alex-abc
Das mit dem negativen Autoincrement-Werten funktioniert. Hier ein Codebeispiel:

 dataAdapter = new NpgsqlDataAdapter(commandString,connectionString_pg);
dataAdapter.MissingSchemaAction = MissingSchemaAction.AddWithKey;               
dataSet = new DataSet();
dataAdapter.Fill(dataSet,"temp");
dataSet.Tables["temp"].Columns["auto"].AutoIncrement = true;
dataSet.Tables["temp"].Columns["auto"].AutoIncrementSeed = -1;
dataSet.Tables["temp"].Columns["auto"].AutoIncrementStep = -1;

Der negative Wert wird später in der Datenbank ersetzt durch den aktuellen Wert.

Sind in der Tabelle "temp" bereits Datensätze enthalten, welche in der Schlüssel-Spalte "auto" positive Werte aufweisen, wird beim erstellen eines neuen Datensatzes der höchste Schlüssel verwendet und davon -1 abgezogen um den neuen Schlüssel zu erstellen. Sind beispielsweise 5 Datensätze mit den Schlüsseln 1,2,3,4,5 vorhanden und verwende ich dann

DataRow row = dataSet.Tables["temp"].NewRow();
row["spalte1"] =  spaltenwert1;
...
dataSet.Tables["temp"].Rows.Add(row);
bekommt der neue Datensatz in der Schlüsselspalte "auto" den Wert 4, der aber bereits in der Tabelle existiert und somit eine Exception auslöst.

Ist euch das auch aufgefallen und kennt jemand eine Möglichkeit dieses elegant zu umgehen?

-yellow

Thema: Filterung der Daten von Abfragen
Am im Forum: Datentechnologien

hallo pako,

wie willst du dann an die SQL-Abfragen kommen? Ohne SQL wirst du da schwer drankommen!

Kann es sein dass du gespeicherte Prozeduren verwenden sollst, die du dann aus dem .NET Code parametrisiert aufrufst?

-yellow

Thema: Filterung der Daten von Abfragen
Am im Forum: Datentechnologien

hallo Pako,

leider habe ich Verständnisschwierigkeiten bei deiner Problemschilderung.

Du sollst eine Datenbankanwendung schreiben bei der die Datenbank abfragen nicht durch deine Anwendung erfolgen sollen? Oder meinst du, dass in der Datenbank Abfragen abegelegt sind, die du einer anderen Anwendung zur Verfügung stellen willst?

Kannst du vielleicht ein Beispiel zum Verständnis posten?

-yellow

Thema: [gelöst] DataGrid/DateSet drucken
Am im Forum: Datentechnologien

hallo Zocker,

bei mir funktioniert der Link einwandfrei. Aber du hast recht, mit VS 2003 hilft das natürlich nicht. Entschuldige, das habe ich wohl überlesen, sollte das nächste mal erst nach dem Kaffee posten...

-yellow

EDIT: Report .NET
EDIT die zweite: Upps, sorry... ist auch .NET 2.0

Thema: Access - Tabellenupdate geht nicht
Am im Forum: Datentechnologien

hallo frisch,

natürlich sollte man vermeiden seine Tabellenfelder mit reservierten Wörtern zu bennenen, aber mit einem einschließendem [] (also [Text]) hätte es wohl auch funktioniert. Das ist ganz praktisch, besonders wenn man hin und wieder auf Feldnamen wie Desrciption oder Address-Nr stösst.

Ich weiss, bin ein bisschen spät dran...

-yellow

Thema: Problem bei XML erstellen (geht weiter...)
Am im Forum: Datentechnologien

hallo donatello,

zu 1)
in dem du ein XmlAttribut "version" erzeugst, in den value "1.1" schreibst und dem root-Knoten anfügst.

zu 2)
in dem du bevor du den Knoten "pathentry" erzeugst und ihn als child an den root-Knoten anhängst, einen Knoten "entries" erzeugst und eben diesen an den root-Knoten anhängst, darauf hin natürlich den "pathentry"-Knoten nicht mehr an den root-Knoten sondern an den "entries"-Knoten anhängen.

-yellow

Thema: [gelöst] DataGrid/DateSet drucken
Am im Forum: Datentechnologien

hallo Zocker,

die Standard Version von Visual Studio .NET 2005 beinhaltet auch einen eigenen ReportDesigner dessen Reports du mit dem ReportViewer-Control anzeigen und auch drucken kannst.

Für mehr Informationen solltest du mal hier nachschauen: ReportViewer control in Visual Studio 2005

-yellow

Thema: unterschiedliche Konfiguration in XML speichern
Am im Forum: Datentechnologien

hallo lindesbs,

ich würde nicht für jede Klasse eine eigene Konfiguration schreiben. Wenn du aber dennoch möchtest bietet es sich an für jede Assembly eine eigene Konfiguration zu schreiben.

Im Namespace System.Xml solltest du alles finden was du zum einlesen von XML-Dateien brauchst. Wenn du die Konfiguration nicht ständig ändern möchtest, sondern nur beim kompilieren, dann würde es sich auch anbieten die config-Dateien als eingebette Resourcen zu verwenden. So müsstest du dir keine Gedanken um den Aufenthaltsort machen. Um Resourcen auszulesen findest du im Namespace System.Resource 'ne Menge. Steht deine Konfiguration im Dateisystem kannst du über den im Namespace System.Reflection enthaltenen Klassen wichtige Informationen über den Aufenthaltsort deiner Assembly und so den Dateipfad deiner Konfiguration herausfinden.

Ich hoffe ich konnte dir damit einwenig weiterhelfen.

-yellow