Laden...

Forenbeiträge von AdmiralKuzan Ingesamt 14 Beiträge

07.10.2022 - 16:14 Uhr

Vielen Dank @Abt für die Antwort. Natürlich hätte ich das googeln können, wenn ich gewusst hätte, dass der Datentyp des Datetimes eine potentielle Fehlerquelle darstellt. Weil wie gesagt, für jeden anderen TableAdapter (in jedem ist der Datentyp AnsiString gewesen) hat alles funktioniert. Nur in diesem einem Fall gab es Probleme. Tatsächlich hat das ändern von Dbtype und Providertime zu DateTime2 (verwende ich als Format in meiner Datenbank) mein Problem gelöst.

Ist trotzdem etwas unbefriedigend weil ich nicht verstehe wieso der Datentyp vom Datetime ein Problem ist und in 19 von 20 Fällen auch ohne die Änderung dessen alles funktioniert hat.

07.10.2022 - 15:05 Uhr

Weil die GetData Funktion das Start -und das Enddatum als String fordert. Warum das so ist weiß ich auch nicht. In der SQL Anweisung schreibt man ja einfach nur ein @Startdatum für eine Variable. Welchen Datentyp diese hat, wird somit nicht manuell festgelegt.

In Anhang hab ich mal ein Bild von den Eigenschaften der Variablen gemacht. Bei DbType steht AnsiString.. was das jetzt aber bedeutet bzw. inwiefern das mein Problem löst verstehe ich allerdings nicht.

07.10.2022 - 13:34 Uhr

Verwendetes Datenbanksystem: SQL Server

Folgendes Problem: Ich habe mehrere TableAdapter erstellt, welche verschiedene Metriken innerhalb der Daten einer Tabelle meiner Datenbank berechnen sollen. Z.b. ein TableAdapter für das Maximum zwischen 2 Zeitwerten, einen TableAdapter für den Modus zwischen zwei Zeitwerten usw..
Probleme macht nun der TableAdapter, welcher den Median zwischen zwei Zeitwerten berechnen soll. Der SQL Code dafür ist etwas schwer leserlich und eventuell auch nicht ideal, allerdings ist die Medianberechnung unter SQL generell so eine Sache. Falls die SQL-Anweisung von Relevanz für die Lösungsfindung sein sollte:


SELECT        ((SELECT        ROUND(MAX(CAST(Strahlung AS DECIMAL)), 0) AS Expr1
                            FROM            (SELECT        TOP (50) PERCENT Strahlung
                                                      FROM            MQTT_Daten
                                                      WHERE        (Zeit BETWEEN @Startdatum AND @Enddatum)
                                                      ORDER BY Strahlung) AS bottomhalf) +
                             (SELECT        ROUND(MIN(CAST(Strahlung AS DECIMAL)), 0) AS Expr1
                               FROM            (SELECT        TOP (50) PERCENT Strahlung
                                                         FROM            MQTT_Daten AS MQTT_Daten_1
                                                         WHERE        (Zeit BETWEEN @Startdatum AND @Enddatum)
                                                         ORDER BY Strahlung DESC) AS tophalf)) / 2 AS Median

Das kuriose ist jetzt, dass dieser SQL Befehl innerhalb des Abfragengenerators (wenn man Rechtsklick auf einen TableAdapter drückt und dann auf Konfigurieren geht) ein vernünftiges Ergebnis erzeugt. Nämlich 1 Spalte mit 2 Zeilen, in der ersten Zeile steht Median und in der zweiten der entsprechende Wert. Alles schön und gut, wenn ich nun aber Rechtsklick auf den TableAdapter drücke und auf Datenvorschau drücke, dann funktioniert der Befehl schon nicht und es wird ebenfalls eine Spalte mit 2 Zeilen zurückgegeben: In der ersten Zeile steht Median und die zweite Zeile ist leer. Wie kann das sein? Wie kann es sein, dass es auf der einen Seite zu funktionieren scheint, aber in einer anderen Ansicht nicht? Im Programm selbst möchte ich den Wert gern in einer Textbox darstellen. Diese bleibt ebenfalls leer. Bin echt ratlos.. Programmiertechnisch habe ich das ganze genau analog zu allen anderen Metriken gemacht (Max, Min, Modus,..). Alle diese Metriken funktionieren, nur eben der Median macht solche Probleme. Der Code zum Anzeigen des Wertes in einer Textbox:


DataTable med = new DataTable();
BachelorDataSetTableAdapters.StrahlMedianTableAdapter strahlmed = new BachelorDataSetTableAdapters.StrahlMedianTableAdapter();
med = strahlmed.GetData(dateTimePicker1.Value.ToString(), dateTimePicker2.Value.ToString());
tbMedian.Text = med.Rows[0]["Median"].ToString();

Irgendwelche Ideen was das Problem sein könnte?

19.09.2022 - 14:36 Uhr

Zuallererst: Ich programmiere eine WindowsForms Anwendung im .net Framwork welche Daten auf einem SQL Server (unter Ubuntu Server) anzeigen und graphisch darstellen soll

Nun zu meinem Problem: Ich habe einen TableAdapter mit dem Namen COLUMNSTableAdapter erstellt, welcher mir alle Spaltennamen (bis auf eine) einer Tabelle ausgibt.


SELECT        COLUMN_NAME
FROM            INFORMATION_SCHEMA.COLUMNS
WHERE        (TABLE_NAME = N'MQTT_Daten') AND (CHARACTER_SET_NAME <> 'Zeit')

Nun möchte ich für Visualisierungszwecke diese Ausgabe in eine Combobox überführen, mit der man dann auswählen kann welche der Spalten in einem Diagramm angezeigt werden sollen. Dafür habe ich den TableAdapter als Combobox per Drag and Drop in meine Form gezogen, sodass die entsprechenden Bindings erstellt werden und ich habe eine Methode "PupulateCombobox()" geschrieben. Sie sieht wie folgt aus:


private void PopulateCombobox()
        {
            DataTable Spalten = new DataTable();
            BachelorDataSetTableAdapters.COLUMNSTableAdapter adapter = new BachelorDataSetTableAdapters.COLUMNSTableAdapter();
            Spalten= adapter.GetData();
            for (int i= 0; i < Spalten.Rows.Count; i++)
            {
                comboBox1.Items.Add(Spalten.Rows[i]);
            }
        }

Diese Funktion rufe ich innerhalb der Form1_Load Funktion auf.

Das ganze macht leider nicht das was es soll, sondern erzeugt das, was ihr im Anhang sehen könnt. Der erste Spaltenname "Temperatur" wird angezeigt, sowie 3 weitere Einträge (von der Anzahl her richtig). Allerdings stehen nun nicht die Spaltennamen da, sondern vier mal "Datenbanktool.BachelorDataSet+COLUMNSRow". Beim Debuggen steht allerdings im DataTable Spalten genau das drin was es soll (meine vier Spaltennamen).

Weiß jemand wo der Fehler liegt?

Vielen Dank und Liebe Grüße

14.09.2022 - 15:13 Uhr

Mich würde noch interessieren, was sich an den Einstellungen dann geändert hat, nachdem du das Häkchen bei "ja" gesetzt hast.

Soweit ich das beurteilen kann hat sich nur folgendes geändert: Persist Security Info ist nun False statt True und wird demnach auch nicht mehr im Connection String angezeigt.

08.09.2022 - 14:02 Uhr

Ich habe jetzt das Data Source Wizard selbst nochmal von vorn begonnen und den Haken bei der Frage nach dem Passwort im Connection String anders gesetzt, nämlich bei Ja. Nun gibt es keine Fehlermeldung mehr beim Starten des Programmes und es funktioniert soweit. Kam mir jetzt einfacher vor als noch irgendwo im Code rumzufuschen und das Passwort manuell zu setzen. Für meine Zwecke reicht dies aus. Ich bedanke mich für die Hilfe bei euch beiden, war ja jetzt letztendlich doch ein ziemlich banales Problem.

08.09.2022 - 11:02 Uhr

Nur im Connection String taucht es nicht auf..
Das Tool zeigt Dir das Passwort natürlich aus Sicherheitsgründen nicht an.
Es scheint also wirklich an dem Passwort zu liegen, aber wie bekomme ich das denn jetzt in den Connection String?
Hab Dir oben a) schon gezeigt wie der String mit Passwort aussehen sollte und b) einen Link gegeben, wo man alle Arten der SQL Connection Strings nachlesen kann, falls bisher gezeigte nicht für Deinen Fall passt.

Ich verstehe ehrlich gesagt nicht worauf du hinaus willst.. Ich kann den Connection String nicht manuell verändern indem ich da rein schreibe. Ich kann nur in den erweiterten Einstellungen der Datenverbindung (s. Anhang) bestimmte Dinge auswählen und der Connection String passt sich dann dementsprechend an. Ich schaffe es aber nicht dass der String so aussieht, wie von dir beschrieben, weil ich nicht weiß welche Dinge ich dafür in den entsprechenden Einstellungen ändern muss. (Passwort fehlt immer)

Muss das Passwort jetzt nun im String stehen und müsste es mir innerhalb der erweiterten Einstellungen im Connection String angezeigt werden, wenn ich alles richtig eingestellt hätte oder nicht aus Sicherheitsgründen? Das hat sich mir anhand deiner letzten 2 Nachrichten nicht voll erschlossen.

08.09.2022 - 10:51 Uhr

Was kannst du denn in den Einstellungen für den .NET SqlClient Data Provider bei "Sicherheit" / "Authentication" auswählen?

Kann da auswählen: NotSpecified (war bei mir der Fall), SqlPasswort, ActiveDirectoryPassword, ActiveDirectoryIntegrated und ActiveDirectiveInteractive . Wenn ich NotSpecified nehme und dann auf Testverbindung gehe steht da "Die Testverbindung war erfolgreich", bei allen anderen kommen Fehlermeldungen. Wenn ich SqlPassword, ActiveDirectoryPassword oder ActiveDirectoryIntegrated wähle, kommt folgende Fehlermeldung: "Es konnte eine Verbindung mit dem Server hergestellt werden, doch während des Anmeldevorgangs trat ein Fehler auf. (provider: SSL Provider, error: 0 - Die Zertifikatkette wurde von einer nicht vertrauenswürdigen Zertifizierungsstelle ausgestellt.)"

ActiveDirectiveInteractive gibt folgende Fehlermeldung:
"Authentication=Active Directory Interactive" kann nicht ohne die Schlüsselwörter "User ID" oder "UID" für die Verbindungszeichenfolge verwendet werden."

Kann es sein, dass ich in meiner Ubuntu Server Distribution, auf der mein SQL Server ja läuft fehlende SSL Komponenten installieren müsste, die standardmäßig nicht installiert sind, von SQL Server aber innerhalb der WindowsForms Anwendung dann aber benötigt werden?

07.09.2022 - 13:36 Uhr

Hast du denn mal in den Logdaten des MSSQL-Servers geschaut, was da ankommt?

Hab den Errorlog gerade offen und da steht:
"Login failed for user 'Charpuser'. Ursache: Das Kennwort hat nicht mit dem für die Anmeldung angegebenen Kennwort übereingestimmt. [CLIENT: IP von meinem Windows PC].

Es scheint also wirklich an dem Passwort zu liegen, aber wie bekomme ich das denn jetzt in den Connection String? Es gibt ja ein Passwort und ich geb das ja auch ein um die Verbindung erstmalig herzustellen und es wird ja auch in der erweiterten Ansicht der Verbindungseinstellungen mit ********** angezeigt. Nur im Connection String taucht es nicht auf..

07.09.2022 - 12:42 Uhr

Wenn Du Teile eines Connection Strings nicht zeigen willst, was richtig ist, dann verwende bitte Platzhalter und verfälsch nicht den String selbst.
Wir wissen zB nicht, warum Du jetzt kein Passwort im String hast: vergessen oder das ganze Ding entfernt?

Das Passwort steht nicht in meinem Connection String. Ich habe beim erstellen der Datenanbindung irgend ein Haken gesetzt, dass das Passwort besonders geschützt und nicht über diesen String übertragen werden soll, ich wusste nicht was das für Auswirkungen haben könnte und hielt es daher für eine sinnvolle Option. Wie genau die Option hieß, weiß ich leider nicht mehr. Eventuell ist das schon ein Problem gewesen nehme ich an?

Wenn Du also Dein Tool (vermutlich SQL Management Studio) auf der gleichen Maschine verwendest auf dem der SQL Server läuft: dann geht das.
Aber Du kannst kein Named Pipes von einer anderen Maschine aus verwenden.

Mein Server läuft innerhalb von Ubuntu Server innerhalb einer virtuellen Maschine in Virtual Box (beschrieben bei Threadstart). VM läuft innerhalb des Windows PCs auf dem ich die C# Anwendung schreibe.

Du verwendets im Tool offenbar Named Pipes - und auch Dein Connection String ist, so wie ich das verstehe, Named Pipes.

Mir ist nicht bewusst dass ich das bewusst eingestellt habe, wie ändere ich das ganze weg von Named Pipes zu z.b. TCP/IP? Kann ich einfach den Connection String manuell verändern?

07.09.2022 - 12:33 Uhr

Heißt der User wirklich "Charpuser" und nicht "CSharpuser"?

Ja, hab den so genannt

07.09.2022 - 10:58 Uhr

Der SQL Server hat mehrere Connection Arten und i.d.R verwendet Dein Tool einen anderen Mechanismus als der Provider in .NET / Java / NodeJS. Das kann man also nicht vergleichen.
In den meisten Fällen wird genau dieser Fehler aber ausgelöst, weil Du was bei den Credentials / Server-Connection Parametern falsch gemacht hast; zeig die bitte mal.

Meinst du die Einstellungen im Anhang?

07.09.2022 - 10:49 Uhr

Als Authentifizierungsmethode nutze ich SQL Server-Authentifizierung, also mit Username + Passwort.

Connection String aus den Eigenschaften der Datenverbindung: Data Source=142.58.42.148;Initial Catalog=Bachelor;Persist Security Info=True;User ID=Charpuser

(geänderte IP)

05.09.2022 - 15:32 Uhr

Verwendetes Datenbanksystem: <MSQL Server>

Hallo, zuerst einmal etwas über mein Projekt: Ich habe einen MSQL Server innerhalb einer Linux Ubuntu Server VM auf einem Windows Host. Dort habe ich eine Datenbank mit einer Tabelle angelegt, sowie einen Benutzer ("Charpuser") mit der Rolle db_datareader. Nun möchte ich für Visualisierungszwecke eine kleine .net Anwendung schreiben, welche sich bei der Datenbank anmeldet und die Daten tabellarisch und graphisch anzeigen kann.

Hier mein Problem: Ich kann mich bei der Datenbank anmelden und verschiedene Table Adapter mit Abfragen generieren, welche auch funktionieren und ich sehe die entsprechenden Daten in der Ansicht im Abfragen Generator vom Table Adapter. D.h. für mich, mein angelegter Nutzer besitzt auf jeden Fall das Recht dazu Daten zu lesen, denn es funktioniert ja innerhalb dieser Ansicht.

Wenn ich nun aber so eine Abfrage erstellt habe, und diese dann per Drag und Drop auf ein Windows Form Objekt ziehen möchte und das Projekt dann Starten möchte, gibt es ein Fehler an folgender Stelle meiner Form1 Klasse (automatisch generierter Code). (s. Anhang für ausführliche Fehlermeldung)

Fehler Code 18456 mit State 1. Laut der Microsoft Dokumentation bedeutet das: "Es sind keine Fehlerinformationen verfügbar. Dieser Status bedeutet normalerweise, dass Sie keine Berechtigung haben, die Fehlerdetails zu empfangen. Weitere Informationen erhalten Sie beim SQL Server-Administrator" (MSSQLSERVER_18456 - SQL Server)

Das ganze bringt mich leider nicht weiter.. Es scheint ein Berechtigungsproblem zu geben. Aber wieso gibt es das erst, wenn ich das Programm starte und einen Abfragewert in meiner .net Anwendung nutzen möchte, nicht aber innerhalb des Abfragengenerators im Table-Adapter? Darauf kann ich mir keinen Reim machen, ich hoffe jemand kann mir helfen.

(Habe das ganze auch schon mit dem sa Benutzer versucht, Anmeldung ging, Abfragen Erstellung im Table Adapter ebenfalls, aber auch hier gabs den gleichen Fehler beim Starten des Projekts.)

Liebe Grüße