Laden...

Variable an sql query in c# übergeben.

Erstellt von Nico1234xdlolhahha vor einem Jahr Letzter Beitrag vor einem Jahr 853 Views
N
Nico1234xdlolhahha Themenstarter:in
1 Beiträge seit 2022
vor einem Jahr
Variable an sql query in c# übergeben.

Ich habe hier im Code ganz oben meine Variable KNR die jedesmal eingelesen wird bei Aufruf. Diese KNR Variable soll jetzt an das SQL Statement übergeben werden, also der inhalt, es klappt einfach nicht. habe es mit diesem @KNR Versucht tut aber nicht. weiß nicht mal genau was das @KNR am Ende genau macht. Wenn ich in einfachen Anführungszeichen beim WHERE direkt eine Nummer reinschreibe tut es ja aber bekomme einfach nicht den Inhalt der Variable übergeben.


public void LoadData(string WNR)
        {
            lbl_knr.Text = KNR;            
            const string sqlTemplate = "SELECT KUNDENAUFTRAGSNR  FROM MESSFELD.AUSSTANDSDATEN WHERE FTNR='@KNR'";        //SQL Query, search for WNR
            
            using (SqlConnection conn = new SqlConnection(SqlConnString))
            {
                using (SqlCommand cmd = new SqlCommand(SqlCmdText, conn))
                {
                    cmd.CommandType = CommandType.Text;
                    cmd.Parameters.AddWithValue("@KNR", KNR);
                    
                    string sql = string.Format(sqlTemplate);
                    Database cdb = new Database();
                    //try to connect and cancel on error
                    if (!cdb.Open("MESSFELD", "BIRNE$2000"))
                    {
                        SetStatusText("Datenbank ist nicht verfügbar.");
                        return;
                    }
                    lbl_wnmr.Text = cdb.LoadSql(sql);                           // Write loaded WNR to lable
                    cdb.Close();
                }
            }
        }

16.827 Beiträge seit 2008
vor einem Jahr

Leider wird hier niemand mit "Es klappt nicht" erkennen können, was und warum etwas nicht geht.
Aber in [Artikelserie] SQL: Parameter von Befehlen sind die Parameter und die Funktionsweisen erklärt.

Der Query besonders in diesem Fall, mit Sonderzeichen in Resourcennamen, mit Klammern versehen sein; Hochkomma bei Parametern weglassen.


SELECT [KUNDENAUFTRAGSNR] FROM [MESSFELD.AUSSTANDSDATEN] WHERE [FTNR] = @KNR;

Dein Code darüber hinaus verwendet als SQL Command Parameter die Variable SqlCmdText, Du zeigst hier aber nur den Query in der Variable sqlTemplate.
Das heisst Dein SQL Befehl läuft hier nicht mit dem Query, den wir hier sehen.

Der Code hier ist ohnehin vollständig, nunja, "verbesserungswürdig" - inhaltlich wie auch aus Übersichtsgründen.
Die SQL Parameter funktionieren nur mit SqlCommand.


public void LoadData(string kundenNummer)
        {
            string sqlTemplate = "SELECT [KUNDENAUFTRAGSNR] FROM [MESSFELD.AUSSTANDSDATEN] WHERE [FTNR] = @KNR;"

            using (SqlConnection conn = new SqlConnection(SqlConnString))
            using (SqlCommand cmd = new SqlCommand(sqlTemplate, conn))
            {
                cmd.Parameters.AddWithValue("@KNR", kundenNummer);

                SqlDataReader reader = command.ExecuteReader();
                while (reader.Read())
                {
                   // Ergebnisse hier
                   Console.WriteLine(String.Format("{0}", reader[0]));
                }
            }
        }

Siehe auch Doku https://docs.microsoft.com/de-de/dotnet/api/system.data.sqlclient.sqlcommand.executereader?view=dotnet-plat-ext-6.0

Und nimm Dir auch [Artikel] Drei-Schichten-Architektur zu herzen und lass es besser sein, Quellcode derart zu vermischen.
Glaube da hast mittlerweile auch die Übersicht verloren, sonst wäre Dir die Rekursion aufgefallen.