Laden...

Forenbeiträge von baer999 Ingesamt 375 Beiträge

10.11.2010 - 16:16 Uhr

Ok dann versuche ich mal anstatt "any CPU" einfach ausschließlich x86 als Ziel anzugeben.

Das wäre bitter, wenn meine Anwendung auf keinem Win7 Rechner laufen würde...

Kann es noch andere Gründe geben außer der OS BIT Version?

10.11.2010 - 11:55 Uhr

Also geschrieben ist es auf jeden Fall für 32 Bit Plattformen.

Ist das aber richtig, dass die ohne Probleme auf Win7 x64 laufen sollten?

Ich habe einige DLL Aufrufe in meiner Anwendung, wie kann ich das Problem dann lösen bzw. woran liegt dass dann, dass die DLLs Probleme machen?

Ich kann ja nicht einfach die DLL in 64 Bit wandeln o.ä.?!

Im Programmverzeichnis sind die DLL mit reinkopiert worden!

09.11.2010 - 20:41 Uhr

Ich habe mit Windows XP eine Anwendung für .NET 3.5 Frameworks entwickelt.
Daraus habe ich einen Installer gebastelt inkl. aller DLLs.

Bei einem Bekannten, der Windows 7 installiert hat, habe ich dann versucht die Anwendung zum Laufen zu bringen, aber egal was ich machte (Als Admin ausühren, etc.) kam immer ein Fenster, dass das Programm nicht gestartet werden konnte, aber jetzt nach Fehlern gesucht wird. Eine Lösung findet er allerdings leider nicht.

Hat jemand von euch ähnliche Erfahrungen, Tipps oder Ideen woran es liegen könnte? thx

28.10.2010 - 13:15 Uhr

Wo kann ich das einstellen bzw. wie heißt dieses Attribut? thx

27.10.2010 - 12:41 Uhr

Ich habe eine Anwendung von mir in ein Setup gepackt und einem Bekannten zum Testen gegeben. Er nutzt Windows 7 und kann die Exe nicht öffnen ohne vorher "Als Admin starten..." auszuwählen.

Damit ist das Programm für Endkunden nicht brauchbar, da zu kompliziert bei der Ausführung. Womit kann ich diese Abfrage umgehen? thx

24.10.2010 - 18:50 Uhr

Ich möchte für die Einstellungen meiner Software mehrere Oberflächen per TabControl bzw. TabPage zur Verfügung stellen (Oberkategorie: Drucken, Anzeige, Datenbank, etc.).
Allerdings kann ich beim TabControl nicht einstellen, dass die Registerkarten für jede TabPage angezeigt werden, denn ich will es wie die Visual Studio Einstellungen links eine ListView um zwischen den einzelnen Reitern hin und herzuspringen.

Jetzt ist meine Frage wie ich die TabPages anzeigen kann ohne, dass dabei das TabControl inkl. Registerkarten angezeigt wird.

17.10.2010 - 15:52 Uhr

Wie kann sich der Updater die Version richtig merken, damit er auch nur wirkliich neue Versionen als "zu-installieren" markiert?!

Ich lege bei den Aktionen einen Schlüssel in der Registry an, was muss ich bei den Übergabewerten eingeben und wie kann ich die Installation ID herausfinden? Ändert sich diese ID auf anderen PCs?

17.10.2010 - 15:07 Uhr

Ich habe eine eigene TextBox Klasse geschrieben, die die BorderColor variabel zuweisen lässt.
Allerdings kommt es dabei zu merkwürdigen Grafikfehlern bei der Darstellung dieser Textboxen auf einer Form.

Kann mir jemand sagen, was geändert werden müsste, da ich diese Herangehensweise selbst bloß im Internet gefunden habe und kopiert habe!
Danke.


    public partial class ctrlTextBox : TextBox
    {
        private Color _BorderColor;
        private bool _OnlyNumeric;

        private static int WM_NCPAINT = 0x0085;
        private static int WM_ERASEBKGND = 0x0014;
        private static int WM_PAINT = 0x000F;

        [DllImport("user32.dll")]
        static extern IntPtr GetDCEx(IntPtr hwnd, IntPtr hrgnclip, uint fdwOptions);

        [DllImport("user32.dll")]
        static extern int ReleaseDC(IntPtr hwnd, IntPtr hDC);

        [Category("Input")]
        public bool OnlyNumeric
        {
            get
            {
                return _OnlyNumeric;
            }
            set
            {
                _OnlyNumeric = value;
            }
        }

        public Color BorderColor
        {
            get { return _BorderColor; }
            set { _BorderColor = value; }
        }

        public ctrlTextBox()
        {

        }

        protected override void WndProc(ref Message m)
        {
            base.WndProc(ref m);

            if (m.Msg == WM_NCPAINT || m.Msg == WM_ERASEBKGND || m.Msg == WM_PAINT)
            {
                IntPtr hdc = GetDCEx(m.HWnd, (IntPtr)1, 1 | 0x0020);

                if (hdc != IntPtr.Zero)
                {
                    Graphics graphics = Graphics.FromHdc(hdc);
                    Rectangle rectangle = new Rectangle(0, 0, this.Width, this.Height);
                    ControlPaint.DrawBorder(graphics, rectangle, _BorderColor, ButtonBorderStyle.Solid);

                    m.Result = (IntPtr)1;
                    ReleaseDC(m.HWnd, hdc);
                }
            }
        }

        protected override void OnKeyPress(KeyPressEventArgs e)
        {
            if (_OnlyNumeric && !char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar) && !(e.KeyChar == 44))
            {
                e.Handled = true;
            }
            base.OnKeyPress(e);
        } 
    }

15.10.2010 - 16:57 Uhr

Ich habe immer noch Probleme beim Automatischen Update, ich habe hier im Screenshot mal einige Infos zusammengefasst:

Der Fehler "D:\Update.xml" kommt immer, sobald ich diese Datei aus dem D:\ Verzeichnis herausnehme, ansonsten sagt mir der Updater ich habe mit der 1.0.0.0 die neueste Version...

Die Daten habe ich für den Server alle vollständig angegeben, deshalb wundere ich mich, dass diese Update.xml nicht auch dort abliegt, sondern im D:\ Verzeichnis.

Ich vermute mal, dass deshalb die Version 1.0.0.1 nicht korrekt als neueste Version erkannt wird. Oder wie funktioniert das Programm grundsätzlich, also welche Datei wird geprüft wegen den Versionen?

Vielen Dank

Achja hier mein Quellcode zum Update aufrufen:

        private void aufUpdatesÜberprüfenToolStripMenuItem_Click(object sender, EventArgs e)
        {
            updateController1 = new updateSystemDotNet.updateController();
            updateController1.checkForUpdatesDialog();
        }
14.10.2010 - 19:03 Uhr

So habe meine Probleme jetzt soweit gelöst, aber da kommt schon das nächste : )

Ich habe meine Anwendung im aktuellen Stand als Version 1.0.0.0 als Updatepaket einem Projekt hinzugefügt. Das habe ich dadurch gemacht, dass ich "Dateien kopieren und ersetzen" ausgewählt habe und die Exe in einen Ordner im Appverzeichnis hinzugefügt habe, ist das so korrekt?

Anschließend habe ich eine neue Version compiliert und ein neues Updatepaket (1.0.0.1) geschnürt. Die neue Exe als "Dateien kopieren und ersetzen" Dateil hinzugefügt und abgeschlossen.

Allerdings wird beim Updatesuchvorgang jetzt immer gesagt ich habe mit der 1.0.0.0 immer noch die aktuellste Version, obwohl schon zwei Versionen auf dem Server liegen...

woran kann das liegen, was könnte ich falsch gemacht haben?

Außerdem wollte ich mal noch wissen, ob man die "Update.xml" auch woanders als im Root Verzeichnis der verwendeten Festplatte ablegen kann? thx

11.10.2010 - 21:18 Uhr

Also beim Prüfen der URL kommen folgende Fehlermeldungen:


Fehler bei der Überprüfung

Bei dem Versuch die Url zu verifizieren ist folgender Fehler aufgetreten:

Der Server hat eine Protokollverletzung ausgeführt.. Section=ResponseStatusLine


Fehler bei der Überprüfung

Bei dem Versuch die Url zu verifizieren ist folgender Fehler aufgetreten:

Der Remoteserver hat einen Fehler zurückgegeben: (530) Nicht angemeldet.

Mit meinen Serverdaten kann ich mich einloggen bei Filezilla und auch über die GUI des .NET Updaters, aber sobald ich dann diese Update-URL prüfen will (über das blaue Label rechts daneben) kommen diese Fehlermeldungen... woran könnte das liegen? thx

10.10.2010 - 21:43 Uhr

Ich interessiere mich sehr für dieses Projekt und habe gerade versucht das Updatefeature in eine meiner Anwendungen zu implementieren.

Dabei habe ich allerdings das Problem, dass beim Ausführen des Updates (updateInteractive) der Fehler kommt:


updateSystem.NET

Während der Updatesuche ist folgender Fehler aufgetreten: Die Datei "D:\update.xml" konnte nicht gefunden werden.

Kann jemand etwas damit anfangen, woran es liegen könnte?

Ich habe über die GUI ein Projekt erstellt und den Projektcode in den UpdateController kopiert, der in meiner Anwendung existiert.

thx

07.10.2010 - 10:43 Uhr

Ok, dann lege ich für jede Tabelle die komplette Struktur als SQL Befehl an.

Wie setzt du dann das hinzufügen an eine Tabelle oder das Ändern der Länge genau um? thx

06.10.2010 - 16:30 Uhr

Was genau meinst du mit "ich habe die Datenbankstruktur im Sourcecode"?

Kann man über die DataSets loopen und ggfs. neu anlegen, falls ein Feld fehlt oder hast du alles per Variablen abgebildet? thx

06.10.2010 - 14:35 Uhr

Hallo liebe C# Gemeinde,

ich möchte meine Software bald an Kunden ausliefern, allerdings ist hierfür eine automatische Updatefunktion unbedingt notwendig, um den Support zu minimieren.

Dabei soll sowohl die Anwendung auf den neusten Stand gebracht werden, als auch die Datenbankstruktur ggfs. angepasst werrden.

Für dieses Problem habe ich mir einige Lösungsansätze zusammengesponnen und würde diese hier gerne diskutieren, um dadurch evtl. zu besseren Lösungen zu kommen.

1.
Für das Update der Anwendung habe ich mir überlegt, auf einem Online Server die EXE Dateien abzulegen.

a. In der Settings Datei wird die Programmversion gespeichert, bei jedem Programmstart wird Online abgeglichen, welches die neuste Version ist, dadurch könnte man erkennen, dass es neue Versionen gibt und diese herunterladen.

Ein Problem hierbei ist, dass ich die "alte" EXE mit der neu heruntergeladenen überschreiben müsste, allerdings habe ich die "alte" ja noch offen und verwende sie zum herunterladen der "neuen" Version.

  1. Für das Update der Datenbank habe ich noch keine zufriedenstellende Lösung.

a. Überlegt habe ich mir, nach jeder DB Änderung das entsprechende SQL Statement als String mit einer Versionsnummer zu versehen. Allerdings müsste ich zur Zeit die SQL Statements noch selbst schreiben und in eine DB packen. Gibt es da Tools, die Änderungen an einer Tabelle als SQL Befehl ausgibt, damit ich diese dann direkt in eine DB Tabelle mit Version 0.xx übernehmen kann.

Dann könnte ich wenn DB Version 0.50 vorliegt, aber aktuell Version 0.87 die neuste wäre, alle Änderungen an der DB mit Version größer 0.50 einspielen und mit executeNonQuery() ausführen.

Für weiter Tipps, Ratschläge und Hilfen wäre ich sehr dankbar.
Das ganze soll für den Kunden entwender automatisch bei Programmstart geschehen oder über einen Menüpunkt ausführbar sein aus der Anwendung selbst.

Danke im Voraus!

15.09.2010 - 13:47 Uhr

Wie kann ich aus einem Event eine Methode aufrufen, in welcher dann geprüft wird, ob ein Invoike Required ist. Anschließend soll per Invoke die selbe Methode erneut aufgerufen werden, aber diese Methode benötigt einen Parameter, was ich mit dem MethodInvoker nicht hinbekomme. Wie kann ich das darstellen? Danke

        private void OpenOrderByPhoneNumber(String PhoneNumber)
        {
            if (this.InvokeRequired)
            {
                this.Invoke(new MethodInvoker(OpenOrderByPhoneNumber (PhoneNumber)));
08.09.2010 - 22:52 Uhr

Ich habe ein UserControl X welches ich in einer Form platziere und dann den Focus auf eine Textbox eines weiteren UserControl Arrays Y mit Index 0 setzen:

            Order.OrderLine[0].txtArticleNumber.Focus();

Allerdings wird nach dem compilieren, der Focus nicht wie gewünscht gesetzt. Kann mir jemand sagen woran das liegen könnte? thx

31.08.2010 - 14:28 Uhr

Vielen Dank für den Hinweis für Codeplex, ich werde mich da mal versuchen an dem TAPI 3.0 Wrapper von JulMar (für Interessierte: Wrapping the TAPI 3.0 API with C++/CLI).


foreach (TAddress addr in tapi.Addresses)
{
    if (String.Compare(addr.ServiceProviderName, "unimdm.tsp", true) == 0 && 
        addr.QueryMediaType(TAPIMEDIATYPES.AUDIO))
        modemAddr = addr;
}

Dieser Code denke ich sollte die Komponenten heraussuchen, die telefonieren können, da müsste ich dann versuchen, dass er die Fritzcard erkennt.

Aber was soll ich da mi tder MSN noch einstellen? thx

30.08.2010 - 08:35 Uhr

Ich habe mir mal das Coding4Fun Framework heruntergeladen und die Samples durchgeschaut. Klingt auf jeden Fall interessant, wenn ich bisher die Fritz Karte nicht per TAPI ansprechen konnte. Kann man das sicher mit TAPI machen, also auf die Fritz Karte zugreifen und Anrufe abfangen oder muss ich mich in CAPI einarbeiten? thx

27.08.2010 - 23:05 Uhr

Ist es möglich mit TAPI eine Fritz Card anzusteuern?
Denn ich habe die Programme von dieser Seite getestet und kann damit bisher leider keine eingehenden Anrufe erkennen (Link: Microsoft Telephony API (TAPI)).
Danke.

27.08.2010 - 18:36 Uhr

Ich versuche die TAPI3.dll in ein Projekt von mir einzubinden und eine TAPIClass anzulegen, aber es kommt immer folgender Fehler:

Fehler 1 Der Interoptyp "TAPI3Lib.TAPIClass" kann nicht eingebettet werden. Verwenden Sie stattdessen die entsprechende Schnittstelle

Das ganze geschieht schon bei folgendem Code Snippet:

private TAPI3Lib.TAPIClass tobj;

Hat jemand eine Idee was ich falsch mache bzw. was ich ändern muss, damit es funktionert? Danke

01.08.2010 - 19:28 Uhr

Ok, habe es jetzt hinbekommen, jetzt habe ich mir DasTelefonbuch Deutschland mal bestellt, weil es scheinbar keine direkte Online Verbindung zum Datenbestand ist, sondern es muss lokal das Telefonbuch abliegen...

Danke für die Hilfe

01.08.2010 - 15:22 Uhr

Ich will in mein Programm eine Suche integrieren, die über die Telefonnr. den Namen und die Adresse von Personen herausfindet. Bei meiner Recherche bin ich auf https://www.adressexpert.de gestoßen, die eine API zur Verfügung stellen, allerdings kann ich die beim Download enthaltene TfD.dll nicht in Visual Studio als Verweis hinzufügen und somit auf die Suche zugreifen.

Fehlermeldung:

Microsoft Visual C# 2010 Express

Es konnte kein Verweis auf "C:\Dokumente und Einstellungen\xxxxx\Desktop\API-2010-02-15\samples\Visual C++\TfD.dll" hinzugefügt werden. Stellen Sie sicher, dass auf die Datei zugegriffen werden kann und dass sie eine gültige Assembly oder COM-Komponente ist.

Hat jemand eine Idee woran es liegen kann oder eine DLL die auch in Visual Studio lauffähig ist? thx

26.07.2010 - 12:19 Uhr

Was könnte ich machen, um für den Druck zu warten bis das DB Update vollständig ist?

Listen kann ich als Druck Input auswählen, aber dann kann ich den Designer nicht so verwenden, wie bisher, da dieser auf DataAdapter ausgelegt ist.

26.07.2010 - 08:55 Uhr

Ich verwende DevExpress XtraReporting. Dort wird mit einem DataAdapter ein Druck mit Daten befüllt. Insofern muss ich doch die Daten erst in die DB speichern, damit der Druck auf die neu gespeicherten Daten zugreifen kann.
Ich habe bisher keine Möglichkeit gesehen, wie ich ohne DataAdapter Daten Drucken kann...

25.07.2010 - 21:32 Uhr

Ich habe beim Speicher Vorgang einer Rechnung ein Abspeichern der Werte in die DataTables und anschließend ein Update per TableAdapter für die Datenbank programmiert.

Direkt anschließend soll die neue Rechnung in einer Druckvorschau angezeigt werden.

Doch die Rechnung enthält keine Daten, wenn ich direkt danach die Druckvorschau manuell im Programm starte enthält die Rechnung die gewünschten Daten.

Also ist scheinbar die Datenbank noch nicht mit dem Update fertig, wenn der Druck bereits auf diese Daten zugreifen will.

Wie kann ich dem Druckprozess mitteilen, dass er warten muss, bis die DB geupdatet wurde?


Hier ein Quellcode Auszug des Teils:
        public void SaveOrder(object sender, EventArgs e) {
            Data.SaveOrder();

            PrintDialog_Finance_A4(date1, date2);
        }

[...]
// Teil der SaveOrder Methode
            // DB Update
            OrderAdapter.Update(drOrder);

// ShowPrintPreview Methode
        public void PrintDialog_Finance_A4(DateTime date1, DateTime date2)
        {
            Reporting.ReportFinanceMonth_A4 Report = new Reporting.ReportFinanceMonth_A4();
            Report.Date1.Value = date1;
            Report.Date2.Value = date2;
            Report.ShowPreview();
        }

20.07.2010 - 09:58 Uhr

Ich will alle Artikel auflisten samt deren Gesamtpreis, zusätzlich sollen als Unterpunkte,
die verschiedenen Zutaten aufgelistet werden und die Preise von diesen, um deutlich zu machen,
wie der Preis des Artikels dadurch beeinflusst wurde:

Datenbank:
Artikel-Preis: 2,00 €

  • Zutat 1 : 0,40 €
  • Zutat 2 : 0,20 €

Ausdruck:
Artikel 1 2,60 €
Preis inklusive:
+ Zutat 1 0,40 €
+ Zutat 2 0,20 €

Wie kann ich dem Unterreport dann mitgeben, für welche Artikelnummer er die Zutaten auflisten soll?

20.07.2010 - 08:39 Uhr

Der Artikelpreis enthält bereits die Preise seiner zugehörigen Zutaten.
Ich brauche aber auch zusätzlich die Zutaten, damit ich sie auf der Rechnung für jeden Artikel mit ausweisen kann.

Also mein Problem ist dass bei folgenden Daten, die falsche Summe berechnet wird (ich summiere pro ausgedruckter Seite die Artikelpreise).

Artikel; Preis; Zutat;
1; 3.50; 6
1; 3.50; 7
1; 3.50; 8

Dadurch würde ich anstatt 3,50 € für den Artikel, insgesamt 10,50 € ausgewiesen bekommen...

Hat jemand eine Idee was ich ändern könnte, damit ich korrekte Zahlen auf meinem Report ausweisen kann?

19.07.2010 - 22:56 Uhr

Für den Designer beim Drucken eines Reports muss ich eine große Tabelle mit allen zu druckenden Attributen zusammenbasteln. Das funktioniert auch ganz gut (Bestelldaten, Positionsdaten, Zutatendaten), allerdings wird in jeder Zeile bspw. der Preis des jeweiligen Artikels ausgegeben, wodurch bei der Summierung der Rechnung insgesamt ein viel zu hohes Ergebnis ausgewiesen wird (da ein Artikel bspw. 2 Zutaten haben kann, wodurch dieser zwei mal ausgegeben wird -> 2 mal Berechnung des Artikelpreises).

Wie kann ich dafür sorgen, dass jeweils in der zweiten Zeile eines Artikels die Spalte Price nicht gefüllt wird, also:

Artikel 1; Price 5.00
Artikel 1: Price 0.00

denn dann würde meine Summierung funktionieren.
Oder gibt es evtl. Hilfen beim Designer von Devexpress Reporting für dieses Problem? thx

18.07.2010 - 22:46 Uhr

Ich verwende XtraReporting von DevExpress, um per Designer meine Drucke zu pflegen.

Für eine Rechnung muss ich die Kundendaten und die Firmendaten im Header nebeneinander anzeigen. Dafür habe ich je einen SubReport platziert.

Allerdings sieht man wie auf dem Screenshot, dass die links befindlichen Firmendaten nicht so dargestellt werden wie ich es mir vorstelle (nebeneinander).

Kann mir jemand einen Tipp geben womit das zusammenhängt bzw. wie ich das umgehen kann? thx

11.07.2010 - 21:42 Uhr

SQL Server 2005 Compact

Wie kann ich aus einem DateTime Feld nur das Date extrahieren und mir eine Liste sämtlicher vorhandener Datumswerte ausgeben (DISTINCT)?

06.07.2010 - 00:37 Uhr

Ich habe 4 verschiedene Tabellen, von denen Daten in einer DataTable vereinigt werden soll. In SQL kann ich das einfach über Joins machen bzw. über den Designer : )

Aber ich will die Daten in die 4 Tabellen bei Programmstart laden und alle Operationen innerhalb von C# machen, d.h. ich würde gern wissen wie ich das als Join über DataTables darstellen kann. thx

06.07.2010 - 00:13 Uhr

Woran kann dieser Fehler leigen, der auftrat, nachdem ich ein Projekt aus VS2008 in VS2010 öffnete und compilen wollte?
Ich habe nichts geändert oder ähnliches, die Verweise der DLLs sind auch korrekt übernommen worden...
thx

Fehler 102 Unerwarteter Fehler bei der GenerateResource-Aufgabe.
System.InvalidOperationException: Der Sicherheitszustand einer AppDomain wurde von einem AppDomainManager geändert, der mit dem NoSecurityChanges-Flag konfiguriert ist.
bei System.AppDomain.SetupDomainSecurity(AppDomainHandle appDomain, ObjectHandleOnStack appDomainEvidence, IntPtr creatorsSecurityDescriptor, Boolean publishAppDomain)
bei System.AppDomain.InitializeDomainSecurity(Evidence providedSecurityInfo, Evidence creatorsSecurityInfo, Boolean generateDefaultEvidence, IntPtr parentSecurityDescriptor, Boolean publishAppDomain)
bei System.AppDomain.Setup(Object arg)
bei System.AppDomain.nCreateDomain(String friendlyName, AppDomainSetup setup, Evidence providedSecurityInfo, Evidence creatorsSecurityInfo, IntPtr parentSecurityDescriptor)
bei System.AppDomainManager.CreateDomainHelper(String friendlyName, Evidence securityInfo, AppDomainSetup appDomainInfo)
bei System.AppDomainManager.CreateDomain(String friendlyName, Evidence securityInfo, AppDomainSetup appDomainInfo)
bei System.AppDomain.InternalCreateDomain(String friendlyName, Evidence securityInfo, AppDomainSetup info)
bei System.AppDomain.CreateDomain(String friendlyName, Evidence securityInfo, AppDomainSetup info)
bei Microsoft.Build.Tasks.GenerateResource.Execute()
bei Microsoft.Build.BackEnd.TaskExecutionHost.Microsoft.Build.BackEnd.ITaskExecutionHost.Execute()
bei Microsoft.Build.BackEnd.TaskBuilder.ExecuteInstantiatedTask(ITaskExecutionHost taskExecutionHost, TaskLoggingContext taskLoggingContext, TaskHost taskHost, ItemBucket bucket, TaskExecutionMode howToExecuteTask, Boolean& taskResult) PizzaCall

05.07.2010 - 22:49 Uhr

Das mit OleDB funktioniert bei den Zahlen hervorragend, allerdings werden bei mir Umlaute wie ä, ö, ü falsch dargestellt.

Dabei hilft es auch nichts, dass ich zwischen ANSI und OEM als Zeichensatz wechseln kann in der Schema.ini:

[artikel.csv]
CharacterSet=OEM

Hat jemand noch eine Idee, wie ich die Sonderzeichen richig importieren kann?

Hier mein C# QCode:

        public DataTable ImportCsvFile(string filename)
        {
            FileInfo file = new FileInfo(filename);

            using (OleDbConnection con =
                    new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + file.DirectoryName +
                            @";Extended Properties='text;HDR=Yes;FMT=Delimited(;)';"))
            {
                using (OleDbCommand cmd = new OleDbCommand(string.Format
                                          ("SELECT * FROM [{0}]", file.Name), con))
                {
                    con.Open();

                    // Using a DataReader to process the data
                    using (OleDbDataReader reader = cmd.ExecuteReader())
                    {
                        while (reader.Read())
                        {
                            // Process the current reader entry...
                        }
                    }

                    // Using a DataTable to process the data
                    using (OleDbDataAdapter adp = new OleDbDataAdapter(cmd))
                    {
                        DataTable tbl = new DataTable("MyTable");
                        adp.Fill(tbl);

                        return tbl;
                    }
                }
            }
        }
04.07.2010 - 11:17 Uhr
        private DataTable GetTableFromCSV(string path)
        {
            if (!File.Exists(path))
                throw new FileNotFoundException();

            FileInfo fileInfo = new FileInfo(path);
            DataTable dataTable = new DataTable();
            string connectionString = String.Format("Driver={{Microsoft Text Driver (*.txt; *.csv)}};Dbq={0};", fileInfo.DirectoryName);
            OdbcConnection connection = new OdbcConnection(connectionString);
            OdbcDataAdapter da = new OdbcDataAdapter(String.Format("select * from [{0}]", fileInfo.Name), connection);
            da.Fill(dataTable);
            return dataTable;
        }

Wo kann ich das mit der Culture in meiner CSV Import Funktion einbauen?

04.07.2010 - 10:52 Uhr

Ich lade aus einer CSV Datei eine DataTable und habe das Problem, dass bspw. aus dem Wert "3.7" wird dann "37" in der DataTable.

Was kann ich dagegen machen? thx

19.06.2010 - 18:27 Uhr

Nein das war nur zum Testen : )
Habe es herausgenommen.

Muss ich den BeginInvoke dann auf der MainForm aufrufen?
Habe noch nie MultiThreading programmiert, das war mir trotz Tutorials irgendwie immer zu hoch : )

19.06.2010 - 17:56 Uhr

Ich habe nach einem MessageBox Aufruf das Problem, dass ich anhand des DialogResults der MessageBox eine Form aufrufen will:


                    DialogResult dlgResult = MessageBox.Show("Es wurde kein Kunde gefunden. Wollen sie einen Kunden mit dieser Telefon-Nummer anlegen?", "Frage", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2, MessageBoxOptions.DefaultDesktopOnly);
                    switch (dlgResult)
                    {
                        case DialogResult.Yes:
                            {
                                CustomerEditor.StartPosition = FormStartPosition.CenterParent;
                                CustomerEditor.ShowDialog();
                                break;
                            }

Allerdings habe ich das Problem, dass durch die MessageBox die Form nicht automatisch bei Start in den Vordergrund geht.
Ganz im Gegenteil, beide (neue und Main-Form) werden in den Hintergrund verschoben und ich sehe stattdessen meine IDE...

Woran kann das liegen? Denn wenn ich nur ein DialogResult "vortäusche" ohne den Umweg der MessageBox zu gehen funktioniert das ganze Einwandfrei... thx

19.06.2010 - 16:29 Uhr

Hat jemand ein Tutorial oder Beispiel, wie ich einen String assymetrisch verschlüsseln kann und zwar mit einem Private Key, während der Empfänger dieses verschlüsselten Textes mit einem Public Key entschlüsseln kann?

Ich habe einige Beispiele gefunden, welche mit Public verschlüsseln und mit Private entschlüsseln aber nicht umgekehrt...

14.06.2010 - 17:29 Uhr

Ja aber wie kann ich dann die obige Abfrage machen, ob eine Spalte in einer Tabelle überhaupt existiert?

14.06.2010 - 16:38 Uhr

"A parameter is not allowed in this location. Ensure that the '@' sign is in a valid location or that parameters are valid at all in this SQL statement."

        public bool DBFieldExist()
        {
            bool FieldExist = true;
            DBVersionAdapter.Connection.Open();
            System.Data.SqlServerCe.SqlCeCommand Cmd = new System.Data.SqlServerCe.SqlCeCommand("", DBVersionAdapter.Connection);
            Cmd.CommandText = "SELECT @fld FROM DBVersion WHERE 1=0";
            Cmd.Parameters.Add("@fld", "Version");
            MessageBox.Show(Cmd.ExecuteScalar().ToString());
            DBVersionAdapter.Connection.Close();
            return true;
        }

Wie kann ich das mit Parametern lösen?

14.06.2010 - 14:29 Uhr

Ok, das würde ich dann einfach in eine Tabelle packen und diese DataRow für DataRow durchgehen.

Wie prüft man komfortabel, ob eine Spalte in einer Datenbank existiert? Muss ich per Adapter eine DataTable füllen die ein Select mit * auf die DB ausführt und diese DataTable dann prüfen oder geht es einfacher? thx

14.06.2010 - 13:30 Uhr

OK, das hört sich sehr gut an und spart erheblich Arbeit,
wie meinst du das "die Datenbankstruktur liegt im Quellcode"?

12.06.2010 - 16:43 Uhr

Also ich speichere die entsprechenden SQL Statements in einer Datenbanktabelle, jeweils einer Versionsnumemr zugeordnet.

Gibt es in Visual Studio die Möglichkeit sich bspw. das SQL Statement von einer Erstellung einer Tabelle generieren zu lassen oder ähnliches? Denn sonst müsste ich jede DB Änderung selbst als SQL Statement definieren.

11.06.2010 - 12:57 Uhr

Habe es nachgestellt und es ist scheinbar ein Problem, dass nicht so leicht zu lösen ist:

        private void textBox1_KeyDown(object sender, KeyEventArgs e)
        {
            if ((e.KeyCode == Keys.Escape))
            {
                e.Handled = true;
                e.SuppressKeyPress = true;
                Form1 frm = new Form1();
                frm.ShowDialog();
            }
        }

Da wird ein BEEP erzeugt.

Ruft man die Form nur mit Show() auf ertönt kein BEEP.

Hat jemand eine Lösung dafür? thx

10.06.2010 - 21:44 Uhr

Ich will bei einer TextBox die Tasten abfangen und falls +, - oder * gedrückt wird soll eine neue Form aufgerufen werden:

            
case Keys.Add:
                    {
                        e.Handled = true;
                        e.SuppressKeyPress = true;
                        Ingredients = new frmIngredients(this, OrderID);
                        Order.ActiveOrderLine = this;
                        Ingredients.NeutralKey = true;
                        Ingredients.StartPosition = FormStartPosition.CenterParent;
                        Ingredients.FillIngredientData(dtIngredients);
                        Ingredients.ShowDialog();
                        break;
                    }

Dabei tritt immer dieser ungeliebte BEEP Ton auf, obwohl dieser mit Handled und SuppressKeyPress unterdrückt werden sollte.
Bei weiteren Nachforschungen fiel mir auf, dass dieses BEEP beim Aufruf ohne Dialog:

                        Ingredients.Show();

Ich will aber die Form modal anzeigen und nicht als unabhängige Form. Woran kann das liegen, dass der BEEP kommt und wie kann man das umgehen? thx

10.06.2010 - 08:47 Uhr

Ich will ausschließlich leere Felder anfügen oder ganze neue Tabellen mit leeren Feldern anlegen.
Wie kann ich das bewerkstelligen? Kann ich dafür einfach SQLs auf die DB loslassen?

09.06.2010 - 22:05 Uhr

Wie kann ich es sicherstellen, dass Datenbankänderungen in meiner Entwicklung bei Testern und Kunden auch automatisch geupdatet werden?

Also bspw. Erstelle ich eine neue Tabelle, füge einer Tabelle ein Feld hinzu etc.
Wenn der Kunde eine neue Version des Programms mit der alten Datenbankversion ausführen will, wird schnell auf Fehler laufen ("Feld x ist nicht bekannt" o.ä.).
thx

08.06.2010 - 21:41 Uhr

Also in der Branche, in welcher ich die Software vertreibe ist Raubkopieren und illegale Weitergabe leider sehr sehr wahrscheinlich, insofern muss ich mich und die Firma, welche meine Software vertreibt schützen vor großen Umsatzeinbußen : )

Meine Idee:

  1. eine XML Datei mit der MAC Adresse und einem Enddatum für die Lizenz. Die MAC Adresse würde im Software-Lizenzvertrag als einzige Hardware mit Nutzungsrechten per Handschrift vereinbart werden. Natürlich mit der Möglichkeit des Wechsels des PCs, also eine neue XML Datei mit anderer MAC Adresse.
  2. Diese Datei wird mit einem öffentlichen Schlüssel verschlüsselt und dem KUnden zugeschickt.
  3. Dieser muss in regelmäßigen Zyklen seine Authentizität bestätigen indem er die Datei bei Programmstart automatisiert an unseren Server schickt, bspw. per WebService. Wir entschlüsseln mit dem privaten Schlüssel entschlüsselt. Zusätzlich wird im Webservice ein Parameter mit der PC-MAC Adresse mitübermittelt

>>> private bool CheckLicense (File XMLFile, MACAdress MAC)

Bei Serverausfällen gibt es eine Kulanz von 10 Tagen in denen die Lizenz weiterläuft, somit haben die Kunden kaum Regressanspruchsmöglichkeiten, da innerhalb von 10 Tagen jeder Server gefixt sein sollte.

Die Funktion CheckLicense gibt true zurück bei korrekter Lizenz oder false bei keiner gültigen Lizenz. Damit kann man dann leicht das Programm öffnen oder sperren.

Was haltet ihr davon, welche Probleme könnte es geben? thx

08.06.2010 - 16:59 Uhr

Ich bin gerade dran eine Software in die Betaphase zu schicken.
Da ich sie danach als Lizenzmodell vermarkten will, muss ich sie ausreichend vor Manipulation und
Unsachgemäßer Nutzung schützen.

Hierbei wäre ich für Vorschläge sehr dankbar.

Grundsätze:

  1. Die Lizenz darf nur von einem Rechner verwendet werden (MAC Adresse)
  2. Die Dauer der Lizenz ist begrenzt (Enddatum)
  3. Der Algorithmus soll möglichst schwer einsehbar sein (auf Grund von Reflection evtl. WebServices?)
  4. Freischaltung soll mit einer Serial o.ä. geschehen (evtl. auch eine Key-Datei mit den Infos?)

a. Was haltet ihr von Webservices bzw. würdet ihr eher zu integriertem Code in der EXE raten?
b. Welche Verschlüsselung ist schwer zu knacken?
c. Welche Art von Freischaltung würdet ihr bevorzugen?
d. Welche Parameter sollten zu Rate gezogen werden? (MAC, Windows-Username, etc.??)

thx