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();
}
}
}
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.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code