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 m.grauber
Thema: Wie kann ich ein zusätzliches Property mit Linq-Join beim SaveChanges() wieder ignorieren?
Am im Forum: Datentechnologien

Hallo Abt und MrSparkle!

Ich bin jetzt aus dem Urlaub zurück; Gesund.

Danke für die Antworten und den Link. Ich werde es beherzigen und mir nun Planungszeit für die Umsetzung in den Kalender eintragen.

Ich wünsche eine vielversprechende Woche!

Thema: Wie kann ich ein zusätzliches Property mit Linq-Join beim SaveChanges() wieder ignorieren?
Am im Forum: Datentechnologien

Hallo Abt!

Es ist schwierig, wenn man immer angetrieben wird, sofort neue Ergebnisse zu liefern und keine Zeit für diese Dinge einplanen kann.

Ich denke in größeren Firmen ist das besser gelöst.

Kennst Du auch keine gute Seite zur Umstellung von EF 6 auf EF Core in englisch? Vielleicht hat noch jemand einen Tipp.

Nochmals vielen Dank!

Thema: Wie kann ich ein zusätzliches Property mit Linq-Join beim SaveChanges() wieder ignorieren?
Am im Forum: Datentechnologien

Hallo Witte!

Danke, aber damit wäre nur ein Select möglich, kein zurückschreiben in die Tabelle "Einladungen".

Hallo Abt!

Danke auch Dir nochmals! Zeitlich ist es für mich sehr schwer mich neben meiner Arbeit auch mit den Änderungen etc. zu befassen. Ich hatte das schon im Hinterkopf auf dem Radar, aber mich noch niemals damit befasst. Erschwerend kommt hinzu, dass ich beim EF den Designer nutze und den "Database First"-Ansatz.

Ich weiß, es gibt einige Infos zur Umstellung auf EF Core. Aber kennst Du hierzu zufällig eine gut gemachte und verständliche Seite auf Deutsch?

Vielen Dank!

Thema: Wie kann ich ein zusätzliches Property mit Linq-Join beim SaveChanges() wieder ignorieren?
Am im Forum: Datentechnologien

Hallo Abt!

Danke für die ausführliche Antwort! Das hilft wirklich sehr!

Ja, ich nutze noch nicht den EF Core - Sollte ich irgendwann umstellen, weil der normale EF irgendwann nicht mehr unterstützt wird? Wann wird das vermutlich sein? - Microsoft behält sich da sehr bedeckt.

https://docs.microsoft.com/de-de/ef/efcore-and-ef6/porting/

Hier schreibt Microsoft:

Zitat
"...Aufgrund der wesentlichen Änderungen in EF Core wird nicht empfohlen, eine EF 6-Anwendung auf EF Core umzustellen – es sei denn, es gibt einen zwingenden Grund für eine solche Änderung. Sie sollten den Wechsel von EF 6 nach EF Core weniger als Upgrade, sondern als eine Portierung betrachten..."

Könnte es sein, dass das normale EF ab einem bestimmten VS nicht mehr genutzt werden kann? (z. B. VS 2021, 2023, 2025, 2027 etc.?)

Nun nochmals zum Problem:

Kunden.Name soll nur beim Lesen gleichzeitig aus der Tabelle Kunde ausgelesen werden (damit der Benutzer den Kundennamen im Klartext sieht, aber beim folgenden Speichern natürlich nicht zurückgeschrieben werden.

Ich dachte, vielleicht kann man im Linq mit "select new {…." alle Felder angeben und dann das Ergebnis in eine Entität vom Typ "Einladung" vornehmen. - Und in der partial class Einladung ist ja dieses (public string Name { get; set; } definiert, in das der Kundenname beim Linq-Befehl übernommen werden kann.

Wenn es so nicht geht, habe ich vermutlich den Post in Stack Overflow falsch verstanden? (letzter Eintrag von Sean, ganz unten)

Ein Locking ist in diesem Programmteil nicht notwendig.

Wenn ich nach dem Linq auf die Tabelle "Einladung" das Feld "Name" manuell beschreibe, klappt ja ein anschließender SaveChanges() auch korrekt und der Befehl ignoriert einfach dieses "lokale" Feld "Name".

Einen zweiten Select und eine foreach-Ersetzung würde ich gerne vermeiden.

Du bist sehr weit und hast eine enorm große Kenntnis und würdest vieles auch ganz anders realisieren. Evtl. kann man diesen Select aber dennoch in einer möglichen Form realisieren.

Danke und schöne Grüße!

Thema: Wie kann ich ein zusätzliches Property mit Linq-Join beim SaveChanges() wieder ignorieren?
Am im Forum: Datentechnologien

Hallo!

Ich nutze VS 2017, C# und den SQL-Server.

Hier ein vereinfachtes Beispiel (was natürlich nicht sehr sinnvoll ist):

Eine SQL-Server Tabelle "Einladung" enthält folgende Spalten:
EinladungID
KundeID
Hinweis

Eine zweite Tabelle "Kunden" enthält folgende Spalten:
KundeID
Name


1.) Select: Alle Kunden zur Einladung Nr. 100 heraussuchen:


var i = (from e in dataEntities.Einladung
                         where e.EinladungID==100
                         select o).ToObservableCollection<Einladung>(...

-> Das klappt. Man erhält eine ObservableCollection mit den Spalten EinladungID, KundeID und Hinweis und ich kann auch Änderungen mit SaveChanges() speichern.


2.) Nun erweitere ich im C#-Code die partielle Klasse "Einladung"
(public partial class Einladung)
um ein Feld "Name" (public string Name { get; set; }), welches nicht in der SQL-Tabelle "Einladung" existiert, aber den Benutzer in der Observable Collection angezeigt werden soll. Damit würde er auch immer den aktuellen Namen aus der Tabelle "Kunden" sehen, auch wenn der sich einmal ändert.

Ohne Probleme habe ich durch diese Erweiterung ein zusätzliches Feld "Name", das ich auch beliebig beschreiben und ändern kann und welches gewünschterweise bei SaveChanges() natürlich nicht in die Tabelle "Einladung" zurückgeschrieben wird. Alle anderen Änderungen an der Tabelle "Einladung" werden aber mit SaveChanges() korrekt in den SQL-Server zurückgeschrieben.

--> Frage. Wie kann ich aber per Linq-Join dieses Feld "Name" zusätzlich auslesen, so dass es bei SaveChanges() ignoriert wird. Das hier klappt leider nicht:


var i = (from e in dataEntities.Einladung
                         where e.EinladungID==100
                         join a in dataEntities.Kunden on e.KundeID equals a.KundeID
                         select e, a.Name).ToObservableCollection<Einladung>(...

- Es sollte so ausgelesen werden, dass alle Änerungen per SaveChanges() in die Tabelle "Einladung" gespeichert werden können, ohne das das Feld "Name" berücksichtigt wird.

- Ich möchte ungern einen zweiten Select auf die Kundentabelle ausführen und dann per foreach alle Datensätze in der Observable Collection einzeln durchgehen müssen.

- Ein T-SQL-Befehl würde diesen Join zwar machen, jedoch kann ich dann nicht mehr mit SaveChanges() Änderungen zurückspeichern.

Folgenden Lösungsvorschlag habe ich entdeckt:

https://stackoverflow.com/questions/23848259/linq-updating-different-table-after-join-process

Umformuliert wäre das so, das klappt leider nicht:


var i = (from e in dataEntities.Einladung
                         where e.EinladungID==100
                         join a in dataEntities.Kunden on e.KundeID equals a.KundeID
                         select new { e, a }).Select(result => { result.e.EinladungID = Einladung.EinladungID; result.e.KundeID = Einladung.KundeID; result.e.Hinweis = Einladung.Hinweis; result.a.Name = Name; return result}).ToObservableCollection<Einladung>(…

Wie bekommt man so etwas hin?

Danke sehr!

Thema: SQL-Server und SQL-Server-Express: Indizes und Performance
Am im Forum: Datentechnologien

Hallo Abt

In Ordnung. Verstanden. Vielen Dank für die Infos. Ihr tut hier wirklich einen sehr guten Job, auf diese Fragen einzugehen!

Mit freundlichem Gruß

Thema: SQL-Server und SQL-Server-Express: Indizes und Performance
Am im Forum: Datentechnologien

Hallo Abt

In Ordnung. Ich dachte im Forum gibt es dazu Erfahrungswerte und man kann sich dazu einfach austauschen und nicht, dass jeder selbst immer von vorne anfängt.

Ich werde dann viele Daten erzeugen und dann Tests fahren.

Danke trotzdem für die Antworten.

Mit freundlichem Gruß

Thema: SQL-Server und SQL-Server-Express: Indizes und Performance
Am im Forum: Datentechnologien

Hallo Abt und T-Virus!

Ersteinmal vielen Dank für die Infos. Ich war leider unterwegs.

Nein, es sollen nicht alle Felder indiziert werden, sondern natürlich wie gesagt nur die, die in in WHERE-Klauseln auch zum Vergleich abgefragt werden und die in JOIN-Verbindungen angegeben sind. Bei anderen Tabellen können das auch entsprechend mehr Felder werden. Mein Beispiel mit der Kundentabelle ist nur ein Beispiel und steht stellvertretend für alle Tabellen.

Diese werde ich nun mit "CREATE INDEX IX_Kunden_Nachname ON Kunden(Nachname ASC)" usw. indizieren.
Das können je nach Tabelle zwischen 2 und 8 Indizes sein.
Auf die Spalten mit den Foreign Keys werde ich auch Indizes setzen.

In der Lösung wird die Kundentabelle und auch alle anderen Tabellen eher seltener bearbeitet und es sollen sehr viele Einträge (z. B. auch > 100.000) gespeichert werden.

- Zur Indizierung von Guid-Spalten habe ich im Netz sehr widersprüchliche Infos gefunden. Einige sagen sogar, dass sei Kontraproduktiv. Hier bin ich etwas verwirrt und habe leider zu wenig Datensätze, um die Differenz zu Messen. - Könnt ihr bitte zumindest dazu noch ein klares Ja oder Nein geben, wenn ihr damit Erfahrungen habt?

- Würdet ihr für die Spalte Nachname und Vorname statt normaler Indizes aus Performancegründen lieber Volltextindizes verwenden?

Nochmals vielen Dank!

Mit freundlichem Gruß

Thema: SQL-Server und SQL-Server-Express: Indizes und Performance
Am im Forum: Datentechnologien

Hallo Abt,

Entschuldige, das war ein wirklich dummer Schreibfehler. :-( Ich meine NON-Clustered. Ich haben den Text oben gleich geändert. Ich habe ja bereits einen Primary Key, der auch die Sortierung bestimmt!

Diese Tabelle ist wie gesagt nur für das Verständnis beim Fragen. Natürlich füge ich nur für die Felder einen Index ein, die ich in den größeren "SELECT …."-Anweisungen auch abfrage und diese Indizes sind nur Beispiele für Indizes bei den verschiedenen Feldtypen an den verschiedensten Orten. Das kommt um Himmelswillen so nicht in die Datenbank!

Indexed View's kommen allerdings nicht in Frage.

Ich habe mich natürlich schon vorher damit etwas befasst und das waren die Fragen, die noch übrig sind.

Könntet ihr sie bitte dennoch ganz knapp (j/n) beantworten?

Das würde wirklich sehr weiterhelfen!

An T-Virus: Danke auch Dir für die Antwort!

Natürlich ist die Datenbank relational und muss es bei den Daten auch sein. Leider ist in meinem Beispiel die Tabelle und die Felder etwas dumm gewählt, aber es soll einfach verständlich sein.

Also soll ich den Index nicht mit "IX_" beginnen? - Beim Anlegen des Index über das Managementstudio und auch im Internet lese ich das immer wieder.

- Wie soll ich dann den Index benennen? (IX hinten anstellen wie z. B. "Kunden_Nachname_IX"?

Danke!

Thema: SQL-Server und SQL-Server-Express: Indizes und Performance
Am im Forum: Datentechnologien

Hallo,

Meine Fragen bezieht sich auf SQL-Server (gekauft) und die kostenlose SQL-Server-Express-Edition und dienen zur Performance-Steigerung beim Lesen von Daten aus einem C# Projekt heraus.

Ich kann die Performance bei den wenigen Datensätzen leider nicht testen. Sicher habt ihr schon viel Erfahrung damit.

1.) Durch die Prozessor-Beschränkung beim SQL-Server-Express könnte es sein, dass sich die weiteren Fragen dann anders beantworten lassen, weil sich die Arbeitslast ändert und z. B. die Express-Editions dann mit weniger Indizes klar kommt. - Ist dies so? (Diese Frage bitte erst am Schluss beantworten)

Allgemeine Infos:

  • Alle Tabellen haben bereits einen Primary Key, daher kann ich zur Performancesteigerung immer nur noch Non-Clustered-Indizes anlegen
  • Die Erhöhung des Speicherplatzes durch neue Indizes ist problemlos möglich. Es wird keine Platzprobleme geben. Die Performancesteigerungen sind das Wichtigste.
  • Die Geschwindigkeit der Datensatzerstellung ist ebenfalls vernachlässigbar und kann durch eine bessere Indizierung auch gerne etwas länger dauern.
  • Zugriff ist aus C# heraus teils über T-SQL-Anweisungen und teils über Linq.
  • Es sollen einmal sehr viele Datensätzen in die Kunden-Tabelle und in zugehörige relationale Tabellen.
  • In möglichen Foreign-Keys sollen keine automatischen Regeln etc. genutzt werden.
Damit es einfache Antworten geben kann, hier ein einfaches Bsp.: eine Tabelle Kunden mit den Feldern
 PKKunden int NOT NULL (Primary Key)
 Nachname nvarchar(70) NOT NULL
 Vorname nvarchar(30) NOT NULL
 Kundenart int NOT NULL
 Kundeseit datetime NOT NULL (Standardwert: 1.1.1900)
 Kundeaktiv bit NOT NULL
 Kundenid uniqueidentifier NOT NULL

Ich würde nun gerne folgende Indizes erstellen:
"CREATE INDEX IX_Kunden_Nachname ON Kunden(Nachname ASC)"
"CREATE INDEX IX_Kunden_Vorname ON Kunden(Vorname ASC)"
"CREATE INDEX IX_Kunden_Kundenart ON Kunden(Kundenart ASC)"
"CREATE INDEX IX_Kunden_Kundeseit ON Kunden(Kundeseit ASC)"
"CREATE INDEX IX_Kunden_Kundeaktiv ON Kunden(Kundeaktiv ASC)"
"CREATE INDEX IX_Kunden_Kundenid ON Kunden(Kundenid ASC)"


2.) Ich würde für alle Felder per "CREATE INDEX" Indizes erstellen, nach denen ich filtere. Gibt es beim SQL-Server eine Obergrenze, ab der durch die vielen Indizes dann die Abfrage evtl. sogar noch länger dauert als ohne oder mit weniger Indizes? (Ich kenne das von anderen Datenbanken, dass dann Abfragen ab z. B. 7 Indizes in einer Tabelle langsamer werden.)

3.) Sind die oberen Indizes die performanteste Art, wenn man dann auf die Tabellenfelder per T-SQL und WHERE-Klausel (z. B. "WHERE Kundenart=2") zugreift?

4.) Sind die oberen Indizes auch die performanteste Art, wenn man auf die Tabellenfelder per Linq-Where zugreift?

5.)
a) Ist "CREATE INDEX" die performanteste Art, wenn man auf dieses Feld später per JOIN zugreift ODER ist es performanter per Foreign-Key (z. B. "ALTER TABLE [dbo].[Kunden] WITH NOCHECK ADD CONSTRAINT [FK_Kunden_Kundenart] FOREIGN KEY([Kundenart]) REFERENCES [dbo].[Kundenart] ([PKKundenart]) NOT FOR REPLICATION")?
b) Oder verlangsamt evtl. sogar der Foreign-Key?


6.) Soll trotz Foreign-Key dennoch auch immer ein Index erstellt werden, damit die Abfragen schneller sind?

7.) Gelten die oberen Antworten dann wirklich für alle Feldtypen (z. B. nvarchar, bit, tinyint, int, datetime etc. (außer z. B. Memofeldern)

8.) Wie sieht es mit GUID's in uniqueidentifier-Feldern (NOT NULL) aus? Gilt das auch dafür?

9.) Mit welcher Art Index kann man die Performance steigern, wenn man z. B. ein nvarchar-Feld mit "WHERE Nachname LIKE %müller%" abfragt?

Vielen Dank im Voraus!!!

Mit freundlichem Gruß

Thema: erledigt: Im gleichen Select auf berechnete bzw. geänderte Spalte zugreifen
Am im Forum: Datentechnologien

Hallo Khalid!

Tausend Dank für die super schnelle und präzise Info! Klappt super!

Woher ihr das immer wisst...

Ich hätte nie nach CTE gegoogled.

Noch eine wirklich erfolgreiche Rest-Woche!

Thema: erledigt: Im gleichen Select auf berechnete bzw. geänderte Spalte zugreifen
Am im Forum: Datentechnologien

Hallo Experten!

Leider habe ich nichts gefunden und weiß auch nicht so recht nach welchem Suchbegriff ich suchen soll.

Ich möchte in einer Abfrage in einer Spalte je nachdem welche Kriterien pro Datensatz erfüllt sind mit geschachtelten CASE WHEN ... END mir Werte ermitteln und mit "AS" in die Spalte "MeinWert" überführen.

Zusätzlich möchte ich weitere Spalten erzeugen, die auf das Ergebnis in "MeinWert" zugreifen sollen und diesen Wert als Ausgang für anderes nutzen sollen.

Ich stelle es mir so vor:

SELECT CASE WHEN .... THEN TableField1 ELSE TableField2 END AS MeinWert, TableField2, TableField3,
CASE WHEN ... THEN MeinWert ELSE 0 AS Ergebnis1,
CASE WHEN ... THEN MeinWert ELSE 0 AS Ergebnis2,
CASE WHEN ... THEN MeinWert ELSE 0 AS Ergebnis3
FROM ....

oder

SELECT CASE WHEN .... THEN TableField1 ELSE TableField2 END AS MeinWert, TableField2, TableField3,
CASE WHEN ... THEN [1] ELSE 0 AS Ergebnis1,
CASE WHEN ... THEN [1] ELSE 0 AS Ergebnis2,
CASE WHEN ... THEN [1] ELSE 0 AS Ergebnis3

Der CASE WHEN, der später MeinWert ermittelt, ist später mehrfach verschachtelt und sollte daher nur 1x berechnet werden. Da ich mit den Spalten Ergebnis1 - 3 mehrfach darauf zugreifen möchte will ich den SQL-Befehl schnell und kurz halten.

Wie kann ich nun auf die 1. errechnete Spalte "MeinWert" zugreifen? Das klappt weder mit dem mit "AS" generierten Spaltennamen noch mit der Spaltennummer [1] die z. B. bei der Sortierung angegeben werden kann.

Später kommt zu allem "Übel" auch noch eine Gruppierungsfunktion über die Ergebnisse dazu, daher sollte die Lösung recht einfach sein.

Danke und gute Arbeit!

SQL-Server ab 2008

Thema: ExecuteStoreQuery in eine dynamische Liste
Am im Forum: Datentechnologien

Hallo T-Virus!

Danke auch Dir für die tolle Hilfe! Ich werde es nun erst einmal mit einer Schnittstelle realiseren, da

Wenn bereits die Funktionalität zum Verbindungsauf/Abbau und die Zugriffe über das EF implementiert ist, versuche ich diese natürlich zu nutzen, statt den Aufbau - mit all seinen Facetten und teils geloggten Einträgen in der DB - in einer anderen Technologie nur für diese eine Abfrage nachzubauen.

Sollte ich es noch dynamischer benötigen, muss ich dann eben wirklich anders zugreifen.

Nochmals vielen Dank an alle!

Thema: ExecuteStoreQuery in eine dynamische Liste
Am im Forum: Datentechnologien

Entschuldige Abt!

Deiner ersten Antwort entnahm ich, dass es "sehr fehleranfällig" sei, aber ich habe nicht daraus gelesen, dass es nicht möglich ist.

Das es eine typisierte Sprache ist, ist klar.

Aber wer kann sich heraussuchen, welche Projekte er übernimmt und mit welcher Technologie dort bereits gearbeitet wird? Abgesehen davon ist das EntityFramework eine sehr gute und schnell umzusetzende Sache!

Wenn bereits die Funktionalität zum Verbindungsauf/Abbau und die Zugriffe über das EF implementiert ist, versuche ich diese natürlich zu nutzen, statt den Aufbau - mit all seinen Facetten und teils geloggten Einträgen in der DB - in einer anderen Technologie nur für diese eine Abfrage nachzubauen.

Wenn nun die Anforderung kommt, so etwas dynamisches zu ermöglichen, sage ich sicher nicht, dass ich dafür nun erst einmal für das gesamte Projekt eine andere Technologie benötige und alles neu programmieren muss.

Ich besitze Jahrzehnte Erfahrung in der Softwareentwicklung unter verschiedensten Entwicklungsumgebungen und DBMS. Sicher derzeit noch nicht so viel in C#.

Wenn ein Linq-Befehl dies problemlos in eine anonyme Liste ermöglicht, aber ein ExecuteStoreQuery nicht, muss Microsoft doch etwas vergessen haben?

Da andererseits bei Linq der Teilaspekt DynamicLinq fehlt, kann man vielfach im Internet lesen - Das sind nicht alles Laien.


Vielen Dank für den Tipp mit dem Interface, ich habe es ebenfalls schon an anderen Stellen genutzt, bin aber hier nicht auf diese Idee gekommen!


Das mit dem "pfuschen" finde ich daher nicht freundlich.

Wenn Microsoft wieder neue Technologien herausbringt, müssen wir uns alle auf andere Entwicklungsumgebungen umstellen und sind dann alle erst einmal Laien.

Thema: ExecuteStoreQuery in eine dynamische Liste
Am im Forum: Datentechnologien

Wenn ich andererseits nun doch verschiedene vorgegebene Klassen nutze: Z.B. Klasse1, Klasse2 könnte ich auch schon viel erreichen mit:

List<Klasse1> Liste1
List<Klasse2> Liste2

aber leider kann ich sie nicht strongly typed über einen immer gleichen Namen ansprechen. Ich hätte aber dann gerne das:


List<???> MeineListe = null;

if (i==1)
  MeineListe=Liste1
else
  MeineListe=Liste2

In jedem Fall möchte ich über "MeineListe" auf die Liste zugreifen, wobei sie je nach Bedarf andere Felder aufweist.

Wie macht man so etwas?

Thema: ExecuteStoreQuery in eine dynamische Liste
Am im Forum: Datentechnologien

Hallo T-Virus!

Danke für die Info!

Das Mappen einer eigenen Klasse ist nicht möglich, da erst der Anwender bestimmt, welche Spalten benötigt werden und diese aus verschiedenen Tabellen kommen können. Das wären also unendlich viele Klassen in unendlichen Kombinationen. Auch die Where-Klausel könnte dynamisch sein.

Folgendes zu DataTable habe ich gefunden:
"As the question/answer you linked to tells you, ExecuteStoreQuery returns entities - it cannot return a DataTable."
http://stackoverflow.com/questions/19796078/executestorequery-entityframework

Ist dort auch nur über eine bekannte Entität <MyEntity> gemacht worden.

Da der Code danach bereits steht und auf die Liste zugreift, tu ich mir schwer, etwas über die Columns auszulesen und dann in eine Liste einer Klasse zu schreiben, die ich erst zur Laufzeit(!) erzeugen müsste.

Ich werd's jetzt mal mit DynamicLinq versuchen.

Evtl. hat ja noch jemand einen Tipp (Abt?) oder Microsoft erweitert mal schnell C#, weil ich sicher nicht der einzige User bin, der so etwas braucht

Thema: ExecuteStoreQuery in eine dynamische Liste
Am im Forum: Datentechnologien

Dankeschön für die Antwort.

Ja, das ist mir vollkommen klar. Aber je nachdem was ein Benutzer im laufenden Programm auswählt sollen unterschiedliche Spalten mit unterschiedlichen Typen zurückgeliefert werden.

Ich handle das Ergebnis dann schon richtig.

Kannst Du mir sagen, wie die richtige Syntax dafür lautet?

Danke

Thema: ExecuteStoreQuery in eine dynamische Liste
Am im Forum: Datentechnologien

SQL-Server 2008, EntityFramework, VS2015

Hallo!

Bei einem ähnlichen Thema hatte ich bereits schon einmal nachgefragt: "[erledigt] Entity Framework - Nur einzelne Spalten mit CreateQuery auslesen" und scheinbar ist das nur per ExecuteStoreQuery möglich.

Da ich nun einen ExecuteStoreQuery ausführe und mir die Felder je nach Abfrage aus verschiedenen Tabellen hole und zusammenführe, muss es doch möglich sein, diese in eine ganz normale Liste mit den richtigen Feldnamen und Feldtypen zu überführen:


ExecuteStoreQuery<dynamic>("SELECT ...").ToList()
ExecuteStoreQuery<dynamic>("SELECT ...").ToList<dynamic>()

...liefern leider nur immer Listen mit Object-Typen.

Auch <List>, <List<dynamic>, <IENumerable<dynamic>> funktionieren nicht.

teils erhalte ich die Fehlermeldung:
Fehler
Der Ergebnistyp 'System.Collections.Generic.IEnumerable`1[System.Object]' darf nicht abstrakt sein und muss einen Standardkonstruktor enthalten.

Ich benötige aber eine Liste mit den richtigen Feldnamen und Feldtypen wie sie mir z. B der folgende Linq-Befehl zurückgibt:


var Liste = (from p in ... select new {Kunde.ID, Kunde.Name}).ToList()

Dies liefert nämlich eine "System.Collections.Generic.List`1[[<>f__AnonymousType8`7[[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, ...", die ich weiter nutzen kann.

Auch das half mir nicht weiter:
[gelöst] Generics: Abstrakte Klassen und IEnumerable

Kann mir jemand als Ostergeschenk sagen, wie es richtig gemacht wird?

Dankesehr und schöne Ostern!

Thema: [erledigt] Prüfen ob Excel Dokument über "X" geschlossen wurde
Am im Forum: Office-Technologien

Hallo!

Ich habe nun den Ablauf so gestaltet, dass ich danach nicht mehr auf das Dokument zugreifen muss. Damit ist das Problem erledigt.

Die Postinghinweise werde ich zukünftig berücksichtigen. Danke!

Thema: [erledigt] Prüfen ob Excel Dokument über "X" geschlossen wurde
Am im Forum: Office-Technologien

Hallo!

In einer Variable wird ein offenes Excel-Dokument gehalten. Der Zugriff klappt problemlos und ich kann das Dokument auch über diese Variable per Befehl schließen.

Leider kann es sein, daß der Benutzer Excel per "X" schließt - also von "außen". Wenn ich danach im Programm unwissend auf die Variable zugreife, kommt eine Fehlermeldung

Fehler
DisconnectedContext
. (Hier im Forum nur in 2 anderen Zusammenhängen auftetreten)

Bevor ich mit der Variable weiterarbeite muß ich also prüfen, ob das Dokument noch offen ist. Ich habe alles mögliche versucht, aber leider erscheint bei dieser Prüfung trotzdem diese gleiche COM-Fehlermeldung.

Hier meine Prüfungen:

if (ObjektDokument != null)             // ist in diesem Fall nicht null und Fehler
if (ObjektDokument.Name != null)   // Fehler

Dann das obere gekapselt in eine trycatch-Konstruktion: Fehler tritt im try trotzdem auf, danach wird aber korrekt das catch abgearbeitet. - Aber der Fehler soll ja eigentlich unterdrückt werden! Ich weiß dann zwar, daß das Dokument zu ist, aber der Fehler lässt sich nicht unterdrücken.

Dann das obere per Action mit und ohne trycatch versucht. Auch einen SafeExecutor versucht.

>> Der Fehler wird bereits beim übergeben der ObjektDokument-Variable in eine Methode ausgelöst.

Wie kann ich diesen Fehler nur unterdrücken? - Am liebsten natürlich in einer Methode, der ich das ObjektDokument übergebe - damit ich die Methode an mehreren Stellen einsetzen kann und ohne die sperrige trycatch-Konstruktion im Code auskomme

Danke

Thema: [gelöst] Excel Late-binding speichern in einen gewünschten Ordner
Am im Forum: Office-Technologien

Hallo Taipi88!

Bombig - Danke! - Mein Fehler gefunden, das hat mir sehr geholfen!!!

Mein Code sah ähnlich aus. Ich hatte beim "Add" anstatt einem Missing nur null verwendet und SaveAs nicht per InvokeMember aufgerufen und die Parameter Dateiname und Format als string bzw. int übergeben.

Nach Umstellung dieser Sachen kam trotzdem noch ein Fehler, also ging ich nochmals alles durch: Ich baute @Pfadnamen und @Dateiname mit "\" zusammen und daher hatte ich "\\", d. h. im Debugger wurde "\\\\" angezeigt. Nun stattdessen Path.Combine genutzt und es klappt!

Dein Code u.a. mit der Verwendung von Missing und InvokeMember ist wesentlich besser, weshalb ich dies nun auch nutze.

Einen schönen Nachmittag!

Thema: [gelöst] Excel Late-binding speichern in einen gewünschten Ordner
Am im Forum: Office-Technologien

Hallo!

Leider komme ich wirklich nicht weiter und der "DefaultFilePath" wird auch ignoriert. Das ist doch eine rudimentäre Funktion die eigentlich klappen müsste? Bei Word ist es ja auch möglich. Speichert ihr Eure Excel-Dokumente nicht, daß das nicht auffällt?

Thema: [gelöst] Excel Late-binding speichern in einen gewünschten Ordner
Am im Forum: Office-Technologien

Hallo Jamikus!

noch eines der vielen tausend Automations-Zusatztools möchte ich von Anfang an nicht nutzen. Ich habe mir so etwas bereits am Anfang vor der Automationsarbeit angesehen und mich dagegen entschieden.

Ein Excel-Dokument sollte sich schon mit Bordmittelchen in einen gewünschten Pfad per Latebinding speichern lassen?

Das mit Speichern, Verschieben und erneut Öffnen habe ich mir auch schon als letzte Möglichkeit ausgeguckt. Das wäre wirklich krass, zumal es dort dann auch Rechteeinschränkungen geben könnte und es länger dauert.

Vielen Dank, dass Du es Dir ansiehst - Das ist wirklich absolute Spitze

Thema: [gelöst] Excel Late-binding speichern in einen gewünschten Ordner
Am im Forum: Office-Technologien

Hallo Jamikus!

Es wird der komplette Pfad mit Dateiname übergeben: z. B. C:\\Users\\mgrauber.MyDomain\\AppData\\Local\\Temp\\MyProg\\Tabelle.xlsx

Auch z.B. "C:\Test\Tabelle.xlsx" funktioniert nicht. "Tabelle.xlsx" hingegen schon - dort wird aber nicht in meinen gewünschten Ordner hineingespeichert.

Excel möchte scheinbar nur einen Dateinamen haben. Daher beim Speichern die Fehlermeldung nicht länger als 218 Zeichen. - Das ist für einen langen Dateinamen, der in vielen Unterordnern steckt, viel zu kurz aber nah an der Grenze der Länge, die ein Dateiname unter dem Filesystem haben darf.

Grüße

Thema: [gelöst] Excel Late-binding speichern in einen gewünschten Ordner
Am im Forum: Office-Technologien

Hallo!

Arbeitet wirklich niemand mit Excel, der etwas dazu sagen könnte?

Es soll wie gesagt unter verschiedenen Excel-Versionen laufen.

Danke im Voraus!!!!

Thema: [gelöst] Excel Late-binding speichern in einen gewünschten Ordner
Am im Forum: Office-Technologien

Hallo!

Ich verwende für die Excel-Automation Latebinding und das soll sich auch nicht ändern.

SaveAs funktioniert so weit, ausser wenn ich einen kompletten Pfad übergebe. Dann erhalte ich folgende Fehlermeldung:

Fehler
Auf die Datei konnte nicht zugegriffen werden. Versuchen Sie die folgenden Lösungsvorschläge:\n\n• Überprüfen Sie, ob der angegebene Ordner vorhanden ist.\n• Stellen Sie sicher, dass der Ordner, in dem sich die Datei befindet, nicht schreibgeschützt ist.\n• Vergewissern Sie sich, dass der Dateiname keines der folgenden Zeichen enthält: < > ? [ ] : | oder *\n• Der Dateiname darf nicht länger als 218 Zeichen sein.


Hier z.B. wird das Thema besprochen, aber nicht so richtig gelöst: http://stackoverflow.com/questions/7632081/getting-error-on-calling-saveas-method

Der Pfad ist nicht länger als diese 218 Zeichen, aber er enthält einen ":" vom "C:\". Im Programm kann der Benutzer den Wunschpfad angeben. Eingetragen ist z. B. C:\\Users\\mgrauber.MyDomain\\AppData\\Local\\Temp\\MyProg\\Tabelle.xlsx

Wenn ich versuche, den Application.DefaultFilePath bereits vor dem Speichern zu setzen und dafür beim Speichern wegzulassen, kann ich zwar den DefaultFilePath setzen, der wird aber beim Speichern unhöflicherweise ignoriert.

Warum ärgert mich Excel so und wie kann ich die Excel-Datei auch in einem anderen Ordner speichern?

Natürlich wäre es gut, auch mehr als einen 218 Zeichen langen Dateipfad+Dateinamen zu verwenden, da ich ja nicht weiß, welchen Pfad der Kunde einstellt.

Beim SaveAs versuchte ich bereits die Variante mit 2 Parametern (Pfad+Dateiname, 51) und mit den vielen Parametern.

Bitte um Hilfe!

Thema: WPF Im hierarchical Treeview ein Root-Node einblenden / anzeigen
Am im Forum: GUI: WPF und XAML

Hallo Parso und Hallo Thomas!

Danke vielmals für die Lösungsansätze!

Ich bin erst jetzt vom Kunden zurück. Inzwischen habe ich es durchgeboxt, daß nun doch die Root-Werte in die DB eingefügt werden dürfen. Ich ändere daher die IDs der derzeit ersten Einträge direkt in der Datenbank. Gut das das nun doch klappt, ansonsten müsste ich die anderen Lösungswege gehen.

Schöne Grüße!

Thema: WPF Im hierarchical Treeview ein Root-Node einblenden / anzeigen
Am im Forum: GUI: WPF und XAML

Hallo,

über ein hierarchical WPF-Treeview...

(IEnumerable<HierarchyNode<TEntity>> CreateHierarchy<...)

...werden alle Werte mit 0 bzw. leerer Guid immer direkt "als erstes" angezeigt. Es gibt daher mehrere Root-Werte:

+Eintrag1 (ID=0 bzw. Guid=leer)
+Eintrag 1a (ID=1 bzw. Guid=73932...)
+Eintrag2 (ID=0 bzw. Guid=leer)

die ID bzw. Guid-Werte kommen aus einer Tabelle und können dort nicht verändert werden. Für Eintrag1 und Eintrag2 ist das (ID=0 bzw. Guid=leer).

Es soll aber nun ein übergeordnetes Root-Node angezeigt werden und erst daran die beiden Einträge mit der ID=0 bzw. leeren Guid:

+Root-Eintrag
+Eintrag1 (ID=0 bzw. Guid=leer)
+Eintrag 1a (ID=1 bzw. Guid=73932...)
+Eintrag2 (ID=0 bzw. Guid=leer)

Wenn ich nun in meine ObservableCollection, die die zwei Einträge enthält einen weiteren Eintrag "Root-Eintrag" mit ID=0 bzw. Guid=leer einfüge, wird es auf der gleichen Ebene angezeigt wie Eintrag1 und Eintrag2.

- Gibt es beim Treeview eine Möglichkeit den Root-Eintrag sichtbar zu machen (z. B. Treeview.ShowRootNode=true, ohne dass ich die ID bzw. Guid-Werte aller Einträge in der Tabelle ändern muss? (- was ich leider nicht darf)

Null funktioniert als ID bzw. Guid leider nicht.

Direkt nachdem die Werte in das Treeview gefüllt werden, ist ja nichts ausgewählt. Dieses "Nichts" könnte evtl. sichtbar gemacht werden?



Danke!

Thema: Was ist die Sharepoint-Datenbank auf dem SBS?
Am im Forum: Datentechnologien

Hallo Witte und Abt!

Danke für die freundliche Hilfe! Jetzt hab ichs verstanden: Bei der Standard SBS-Version ist nur ein "interner SQL-Server" für das benötigte SharePoint dabei. Daher muss ich dort die Express-Version oder einen vollen SQL-Server installieren. Und wenn es um das Anlegen einer neuen Instanz unter dem bereits voll installierten SQL-Server geht, so ist der Weg von Witte der passende.

Thema: Was ist die Sharepoint-Datenbank auf dem SBS?
Am im Forum: Datentechnologien

verwendetes Datenbanksystem: <SQL-Server 2008R2>

Hallo!

Ein Kunde hat ein 2008er SBS Server laufen und darauf ist ein SQL Server Management Studio installiert über das ich (hier direkt am Server) mehrere SharePoint-Datenbanken sehe.

Ich möchte auf dem SQL-Server eine eigene DB erstellen. In der SharePoint-DB geht das nicht. Als Alternative kann ich mich nur mit dem SQL-Server Compact verbinden, welchen ich nicht nutzen möchte.

- Für was ist diese "FILESERVER\SHAREPOINT"-Instanz zuständig? Der Admin wußte das auch nicht.

- Ich habe auch als "FILESERVER\Administrator" keinen Zugriff, etwas an den DB-Einstellungen dieser SharePoint-Instanz zu ändern.

- Wahrscheinlich ist es auch nicht gut, in dieser SharePoint-Instanz herumzuspielen und eine eigene Datenbank da hineinzulegen? Ich möchte nur eine eigene DB auf dem Server anlegen. Wie klappt das?

- Wie sehe ich, ob es sich um einen richtig installierten SQL-Server handelt
oder nur eine interne Verwaltungsdatenbank von Microsoft?

- Beim Verbinden im SQL Server Management Studio habe ich auch versucht mich mit dem Servernamen direkt zu verbinden. Dort kommt nur eine Fehlermeldung "Es kann keine Verbindung mit 'FILESERVER' hergestellt werden. Gleiches gilt für FILESERVER\SQLExpress.

- Müsste ich notfalls einen SQL-Server Express noch darüber installieren und falls ja, beeinflusst er die bereits vorhandenen SharePoint-Instanz bzw. DB nicht?

Ich kenne bislang nur direkt installierte SQL-Server und Express-Versionen. Was ist das hier?

- "In Windows SBS 2011 Standard fungiert SQL Server 2008 R2 Express als Datenverwaltungssystem für die interne Unternehmenswebsite sowie für alle anderen Websites, die mit SharePoint Foundation 2010 erstellt werden" --> Bedeutet das, dass der scheinbar vorinstallierte SQL-Server für andere Datenbanken überhaupt nicht genutzt werden kann?

Danke