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 Florian Reischl
Thema: Kompatibilität .NET Standard zu .NET Framework
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Kompilieren kann ich auch alles. Auch die Konsolen-Anwendung kann ich erfolgreich ausfhren. Kannst du den Unit Test ausführen? Hier bekomme ich den genannten Laufzeitfehler.

Thema: CSV-Zeilen mit gleichem Datum zusammenfassen
Am im Forum: Grundlagen von C#

Hallo

Ist Geschmackssache mit deinem verschachteltem string-Array, aber du kannst z.B. über Linq recht einfach gruppieren und dann Aggretsfunktionen anwenden.

        [TestMethod]
        public void MyTestMethod()
        {
            var arr = new string[][]
            {
                new string[] { "16.11.2018 12:18:46", "1", "1", "1", "1", "1" },
                new string[] { "16.11.2018 12:18:46", "1", "1", "1", "1", "1" },
                new string[] { "17.11.2018 12:18:46", "1", "1", "1", "1", "1" }
            };

            var result = arr.GroupBy(row => row[0])
                            .Select(g => new
                            {
                                Key = g.Key,
                                C1 = g.Sum(row => int.Parse(row[1])),
                                C2 = g.Sum(row => int.Parse(row[2])),
                                C3 = g.Sum(row => int.Parse(row[3])),
                                C4 = g.Sum(row => int.Parse(row[4])),
                                C5 = g.Sum(row => int.Parse(row[5])),
                            }).ToArray();

        }

Viele Grüße
Flo

Thema: Kompatibilität .NET Standard zu .NET Framework
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Freilich. Ist angehängt.

Thema: Kompatibilität .NET Standard zu .NET Framework
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo Zusammen

Danke für eure Hilfe! Scheinbar hast das Verhalten speziell mit Unit Test (.NET Framework) Projekten zu tun.

Ich habe mittlerweile eine Test-Solution erstellen können in der das Verhalten dediziert nachvollziehbar ist.

.NET Standard DLL

using System.Net.Http;

namespace ClassLibrary1.STD {
    public class Class1Std {
        public Class1Std(HttpClient client) {
        }
    }
}

.NET Framework DLL (mit Referenz auf die Standard DLL)

using ClassLibrary1.STD;
using System.Net.Http;

namespace ClassLibrary1.Fx {
    public class Class1Fx : Class1Std {
        public Class1Fx(HttpClient client)
            : base(client) {
        }
    }
}
--> System.Net.Http ausgewechselt über NuGet

Unit Test Projekt (.NET Framework)

    [TestClass]
    public class UnitTest1 {
        [TestMethod]
        public void TestMethod1() {
            var c1 = CreateClass();
        }

        private Class1Fx CreateClass() {
            HttpClient client = new HttpClient();
            Class1Fx c1 = new Class1Fx(client);
            return c1;
        }
    }
--> Führt zu dem genannten Laufzeitfehlet

Console App (.NET Framework)

    class Program {
        static void Main(string[] args) {
            var c1 = CreateClass();
        }

        private static Class1Fx CreateClass() {
            HttpClient client = new HttpClient();
            Class1Fx c1 = new Class1Fx(client);
            return c1;
        }
    }
--> Funktioniert

Viele Grüße
Flo

Thema: Kompatibilität .NET Standard zu .NET Framework
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo

Ich bin sicher nicht der erste mit dem Problem, aber mit der Suche habe ich nichts gefunden.

Problem:
Wir haben eine SOA Architektur, basierend auf ASP.NET Web API (.NET Framework).

Nun startet parallel ein zweites Projekt, welches unsere Basis-Funktionalität verwenden möchte. Dieses Projekt startet mit .NET Core. Da wir nicht 'mal schnell' auf Core gehen können und die anderen natürlich nicht mehr mit .NET Framework starten wollen, habe ich unsere Basis-Funktionalität in .NET Standard überführt. Das funktioniert auch soweit.

Allerdings, habe ich nun das Problem, dass auf die STD Library aufsetzende .NET Framework Libraries Probleme mit der Typ-Kompatibiltät bekommen.

Konkreter Fall:

In der .NET Standard Library gibt es eine Klass mit folgendem Construktor:


    public sealed class RestConfigurationSource : BaseConfigurationSource
    {
//...
//HttpClient is from:
// Assembly netstandard, Version=2.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51
// C:\Program Files\dotnet\sdk\NuGetFallbackFolder\netstandard.library\2.0.3\build\netstandard2.0\ref\netstandard.dll
        internal RestConfigurationSource(HttpClient httpClient)
        {
//...

In einem darauf aufsetzendem Unit-Test Projekt (.NET Framework) versuche ich die Klasse zu initialisieren:


        internal static RestConfigurationSource CreateSource()
        {
            FakeHttpMessageHandler fakeResponseHandler = CreateFakeResponseHandler();
//HttpClient is from:
//System.Net.Http, Version=4.2.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
//C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\Microsoft\Microsoft.NET.Build.Extensions\net461\lib\System.Net.Http.dll
            var client = new HttpClient(fakeResponseHandler);
//...
            var configSrc = new RestConfigurationSource(client);

Beim Versuch in die Methode zu springen bekomme ich folgende Exception:
Fehler
System.MissingMethodException
HResult=0x80131513
Message=Method not found: 'Void MunichRe.Uwpf.Api.Core.Configuration.Rest.RestConfigurationSource..ctor(System.Net.Http.HttpClient)'.
Source=MunichRe.Uwpf.Api.Core.UnitTests
StackTrace:
...

Ist für mich erstmal nachvollziehbar. Die beiden Versionen von HttpClient entsprechen unterschiedlichen Klassen. Aber das muss ja ein Problem sein dass bei dem Arbeiten mit .NET Standard und .NET Framework bedacht wurde.

Könnt ihr mir vielleicht auf die Sprünge helfen, gerne einfach mit einem RTFM Link.

Danke schon Mal!
Flo

Thema: NHibernate Join
Am im Forum: Datentechnologien

Zitat von Coffeebean
also sieht das Mapping für dich soweit richtig aus?
Keine Ahnung - Das meinte ich mit "kann ich nicht sagen".

Grüße
Flo

Thema: NHibernate Join
Am im Forum: Datentechnologien

Hi Coffeebean

Ich kann dir zwar nicht genau sagen woran es bei dem NH Mapping liegen könnte, aber schau dir doch im SQL Server Profiler mal an was für ein Statement an den Server geschickt wird, vielleicht hilft dir das auf die Spur.

Viel Glück
Flo

Thema: Tabellen aus Dataset in einer einzigen Tabelle zusammenfassen
Am im Forum: Datentechnologien

Hallo Handsup18

Du kannst z.B. die SqlBulkCopy Klasse verwenden um die Daten an den Server zu senden.

Ansonsten kannst du dir auch mal die mit SQL Server 2008 eingeführten Table Vaued Parameter anzuschauen.

Grüße
Flo

Thema: EF LINQ WHERE C#-Funktion verwenden
Am im Forum: Datentechnologien

Hallo seeba

Mit EF würde ich, wie Gü bereits geschrieben hat, mal versuchen ob's mit Contains funktioniert.

Mit native ADO.NET würde ich entweder die CSV-Liste der IDs an eine SP übergeben, serverseitig über eine Split-Methode trennen und in eine Temp-Table schreiben mit der man dann joinen kann; oder direkt mit Table Valued Parameters arbeiten.

Grüße
Flo

Thema: WinForm MSSQL Connector
Am im Forum: Datentechnologien

Die DB Verbindung kannst du auch ganz ohne eigenen Source-Code prüfen.

Explorer -> Rechte Maustaste -> Neue Textdatei -> Dateiendung auf ".udl" ändern -> Doppelklick.
Dann kannst du im "Provider" Register SQL Server auswählen, im "Verbindung" Register alle Infos eingeben und über den Test Button prüfen. Wenn was nicht passt bekommst du da die entsprechende Fehlermeldung.

(Die Combo-Box mit den Servern funktioniert meistens nicht, da einfach den Namen selbst eintragen.)

Grüße
Flo

Thema: DLLNotFoundException
Am im Forum: Datentechnologien

Wenn SQLite sich im GAC registriert musst du bei der Referenz in deinem Projekt sicherstellen dass "Copy Local" eingestellt ist.

Grüße
Flo

Thema: WinForm MSSQL Connector
Am im Forum: Datentechnologien

Hallo tofu

Hast du sichergestellt dass beim SQL Server TCP/IP aktiviert ist? Das ist bei SQL Server Express standardmäßig deaktiviert.

Grüße
Flo

Thema: Datenbank-Updater
Am im Forum: Datentechnologien

Hallo COOLIO88

Fragen:

1. Habt ihr VS 2010 oder die Database Professional Version von VS 2008?
2. Haben alle Kundendatenbanken den gleichen Stand? Oder vielleicht nur zwei/drei unterschiedliche Versionsstände?

Grüße
Flo

Thema: MySql Select in Objekt umwandeln
Am im Forum: Datentechnologien

Wie schon gesagt, ein ORM würde das für dich übernehmen, wenn du native ADO.NET verwendest musst du's selbst mappen.

Thema: MySql Select in Objekt umwandeln
Am im Forum: Datentechnologien

Hallo

Schau dir mal O/R-Mapper wie NHibernate an. Ansonsten kannst du aber natürlich auch mit reader.GetString(i)/GetInt32(i)/.... in Properties eines Objektes mappen, statt einen String zusammenzuhängen.

Grüße
Flo

Thema: MSSQL Server Standardwert für Spalte
Am im Forum: Datentechnologien

Hi Khalid

Danke für die Aufklärung :-) ! Wusste ich nicht.

Viele Grüße
Flo

Thema: MSSQL Server Standardwert für Spalte
Am im Forum: Datentechnologien

Hi

Datenbankseitig definierte DEFAULT Werte bringen in Verbindung mit O/R-Mappern nichts. Wie Coder007 schon gesagt hat, greifen DEFAULT Werte nur wenn die Spalte gar nicht im INSERT Statement enthalten ist, nicht wenn sie mit dem Wert NULL übergeben wird - und genau das ist das was der ORM macht.

Beispiel..

Gehen wir von folgender Tabelle aus:


CREATE TABLE Foo (
   Id INT NOT NULL IDENTITY(1,1) PRIMARY KEY CLUSTERED
   ,Bla INT NOT NULL
   ,Bluf VARCHAR(10) NOT NULL DEFAULT '1,2,3'
);

Ein valides INSERT Statement wäre:

INSERT INTO Foo (Bla) VALUES (1);

Der ORM erzeugt jedoch:

INSERT INTO Foo (Bla, Bluf) VALUES (1, NULL);

BTW:
Dein default Wert '1;2;3;4' richt nach einem Verstoß der ersten Normalisierungsform ;-).

Grüße
Flo

Thema: Zusammengesetzter Fremdschlüssel
Am im Forum: Datentechnologien

Hi Florian

Das angehängte Bild zeigt was Coder007 meinte.

Grüße
Flo

Thema: CLR System.Security.SecurityException
Am im Forum: Datentechnologien

Hallo Nesso

Natürlich kann man auch in T-SQL auch dynamisches SQL erzeugen:



DECLARE @id INT = OBJECT_ID('INFORMATION_SCHEMA.TABLES');
DECLARE @tableName VARCHAR(250) = 'all_objects'
DECLARE @schemaName VARCHAR(250) = 'sys';


-- avoid sql injection
SELECT
   @tableName = QUOTENAME(@tableName)
   ,@schemaName = QUOTENAME(@schemaName);

-- build dynamic SQL
DECLARE @sql NVARCHAR(MAX);
SELECT @sql = N'SELECT * FROM ' + @schemaName + '.' + @tableName + ' WHERE object_id = @idIn';

EXECUTE sp_executesql @sql, N'@idIn INT', @idIn = @id;


Allerdings ist die Frage immer ob man's wirklich braucht. In den meisten Fällen hat man eher ein Design-Problem oder noch nicht die richtige Lösung gefunden.

In wie vielen Tabellen gibt's die Spalte "ID_CR" denn? Warum musst du in mehreren Tabellen nach einer ID suchen?

Grüße
Flo

Thema: BestPractice: Datenobjekte mit Objekthierarchien laden?
Am im Forum: Rund um die Programmierung

Lazy Loading hat nichts mit ORM oder nicht ORM zu tun, es ist nur so das einige das out-of-the-box unterstützen.

Lazy Loading ist ein Pattern, nicht eine Erfindung von O/R-Mappern, und kann natürlich auch mit native ADO.NET realisiert werden. Die Frage die du dir beantworten musst ist "Lazy Loading" oder "Eager Loading". Beide Ansätze haben Vor- und Nachteile und die musst du in deinem Projekt gegeneinander abwiegen.

Grüße
Flo

Thema: DataGridView: ReadOnly Zellen editieren
Am im Forum: GUI: Windows-Forms

Hi

Nein, nicht ganz so. Du stellst den EditMode des Grids beispielsweise auf "EditProgrammatically" (wobei ich erstmal schauen würde ob nicht eine der anderen Möglichkeiten eh schon passt). Setzte das Grid nicht auf ReadOnly, sondern nur die Spalten die du nicht editieren willst. Wenn du's dann wirklich mit Doppelklick willst, rufst du im CellDoubleClick die BeginEdit Methode auf.

Grüße
Flo

Thema: BestPractice: Datenobjekte mit Objekthierarchien laden?
Am im Forum: Rund um die Programmierung

Hallo #coder#

Zitat
Die Datenbank steht, mit dem Entity Framework 4.1
Nope, ist alles Konfigurationssache. Nur wenn das Code-First Template verwendest wird davon ausgegangen, dass du noch keine DB hast. Wenn du das Standard-Template, das Change-Tracking Entities Template oder einfach gar keines verwendest kannst du dir das Modell aus einer bestehenden DB erzeugen lassen.
Zitat
Ein Problem ist, das die Anwendung mit SharePoint 2010 laufen muss
Das verstehe ich jetzt nicht. Meinst du die Anwendung muss auf dem gleichen Server laufen auf dem der SharePoint installiert ist und da darf kein neuer .NET Framework installiert werden? Ansonsten wird es dem SharePoint doch recht egal sein welche .NET Version die Clients haben, oder?

Zum Laden deiner Orders schließe ich mich Gü's Vorschlag an. ORM mit Lazy Loading oder Order-Repository und LoadForCustomer Methode. Das lässt sich recht gut mit der .NET 4.0 Lazy<T> Klasse realisieren.

Grüße
Flo

Thema: DataGridView: ReadOnly Zellen editieren
Am im Forum: GUI: Windows-Forms

Hi

Schau dir mal die "EditMode" Eigenschaft des DataGridView an.

Grüße
Flo

Thema: Switch-case-Anweisung mit Strings
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hi Lumbra

Versteh' mich nicht falsch aber ich würde sagen da passt irgendwas anderes nicht.

Führ' das hier mal aus:



      [Test]
      public void SampleUsage() {
         string[] extensions = new[] { ".zip", ".7z", ".rar", "blubber", "blubb" };

         foreach (var test in extensions) {
            switch (test) {
               case ".7z":
               case ".zip":
               case ".rar": 
               case ".gzip":
                  break;
               default:
                  Debug.WriteLine(test);
                  break;
            }
         }
      }

Grüße
Flo

Thema: [MS SQL] Funktion aufrufen, wenn Timestamp erreicht wird
Am im Forum: Datentechnologien

Hi moson

Ich bin mir nicht sicher ob ein Trigger hier die richtige Wahl ist. Wenn ich Yheeky richtig verstanden habe, geht es darum neue Zeilen jetzt einzufügen und später zu verarbeiten, der Trigger feuert sofort.

Man könnte, wenn man will, den Trigger verwenden um die Schedules im SQL Server Agent zu erzeugen. [subjektiv]Allerdings bin ich kein großer Freund von viel Logik in Triggern[/subjektiv]

Grüße
Flo

Thema: Längenbegrenzung von Strings
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

@Diräkt: Jepp, ich find's auch in TSQL immer wieder sehr praktisch. Irgendwann hat es mir in C# einfach gereicht :-P

Thema: Längenbegrenzung von Strings
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Mache ich mit:


    public static class StringExtensions
    {
        public static string Left(this string s, int length)
        {
            length = Math.Min(s.Length, length);
            return s.Substring(0, length);
        }

        public static string Right(this string s, int length)
        {
            length = Math.Min(s.Length, length);
            return s.Substring(s.Length - length, length);
        }
    }

Grüße
Flo

Thema: Linq to Entites - Vererbte Entities
Am im Forum: Datentechnologien

Hi Motzi

Ich schließe mich Gü an. Ein Projekt sehe ich eben falls nicht als Angebot. Ich sehe die Relation sogar fast als n:m Beziehung. Theoretisch können ja mehrere Angebote zu einem Projekt erstellt werden und aus einem Angebot können ggf. mehrere Teil-Projekte werden (das kommt aber auf die Firmenpolitik an).

Grüße
Flo

Thema: [MS SQL] Funktion aufrufen, wenn Timestamp erreicht wird
Am im Forum: Datentechnologien

Hi Coffeebean

Ich weiß nicht wo da die Grenzen liegen, ich habe aber schon in Umgebungen gearbeitet wo täglich einige tausend neue Schedules erzeugt wurden und auch schon mit Agent Jobs die im Minutentakt gelaufen sind. Wenn's aber mehrere tausend Jobs pro Minute würden habe ich bislang immer andere Wege gewählt.

Wenn ich mich recht erinnere muss man, wenn man immer wieder neue Schedules erstellt, also nicht einen der einfach immer wieder läuft, halt die alten Schedules regelmäßig löschen. Sonst läuft einem die msdb voll.

Grüße
Flo

Thema: [MS SQL] Funktion aufrufen, wenn Timestamp erreicht wird
Am im Forum: Datentechnologien

Guten Morgen

Bei. 30 Einträgen gar kein Problem. Erzeuge einfach bei jeden Eintrag einen Schedule für einen SQL Server Agent Job.

Grüße
Flo