Benutzer mit den meisten Antworten
C# SQL Server (System.Data.OleDb.OleDbException "Üngültige Autorisierungsangabe Ungültiges Attribut für die Verbindungszeichenfolge)

Frage
-
Hallo,
Habe ein Problem mit c#und zwar bin ich von einer Access Datenbank auf eine SQl datenbank umgestiegen und die Verbindungszeichenfolge stimmt nichtmehr oder visual studio nimmt Sie nicht an, hab schon im Internet geschaut und so müsste Sie ausschauen.:
"Provider=SQLOLEDB;Data Source=Your_Server_Name; Initial Catalog= Your_Database_Name; UserId=Your_Username; Password=Your_Password;
Vielleicht habe ich nur einen kleinen Fehler.:
OleDbConnection con = new OleDbConnection("Provider=SQLOLEDB;Data Source=/Pia710/SQL_LVerwaltung;Initial Catalog=LagerverwaltungPIA;UserId=XXX;Password=XXX;"); OleDbDataAdapter oda = new OleDbDataAdapter("Select Role from [Customers] Where FullName ='"+txtBN.Text+"' and Password='"+txtPW.Text+"' ",con); DataTable dt = new System.Data.DataTable(); oda.Fill(dt); if (dt.Rows[0][0].ToString() == "Admin") { rabool = true; NeuerBenutzer NB = new NeuerBenutzer(); this.Hide(); NB.Show(); Rolle = "Admin";
Mit freundlichen Gruß
Pascal Zentek
Antworten
-
- Als Antwort markiert Pascal_1991 Montag, 14. Mai 2018 13:04
-
Hallo Pascal,
was sollte "dt" auch beinhalten. Wenn Du dir die Variable "dt" ausgeben lässt, kommt maximal der Name der DataTable dabei raus, sonst nichts.
Die Inhalte siehst Du erst über die Rows und Columns.
"Admin" wird in der DataTable selbst durch deinen Code niemals stehen.
Wenn Du nur einen einzelnen Wert auslesen willst, ist das aber der falsche Code. In dem Fall solltest Du eher <SqlCommand>.ExecuteScalar() mit Auslesen des Rückgabewerts ausführen. Also bspw. so:
public String GetResult( SqlConnection _connection, String _sqlStatement ) { String result; SqlCommand command = new SqlCommand(); command.Connection = _connection; command.CommandText = _sqlStatement; command.CommandType = CommandType.Text; result = command.ExecuteScalar().ToString(); command.Dispose(); return result; }
Aufruf dann bspw. so:
String sql = "Select Role from [Customers] Where FullName ='" + txtBN.Text + "' and Password='" + txtPW.Text + "'"; String role = this.GetResult( conn, sql );
Die Stringverkettung und Integration von Variablen in das SQL Statement ist aber so ziemlich die schlechteste Idee, die Du haben kannst. Verwende durchgehend Parameter Objekte, bei SQL Server SqlParameter um die Werte einzubinden.
SqlConnection connection = new SqlConnection( "<ConnectionString>" ); connection.Open(); SqlCommand command = new SqlCommand( "SELECT ... FROM ... WHERE Feld1 = @Wert1 AND Feld2 = @Wert2", connection ); command.Parameters.AddWithValue( "@Wert1", TextBox1.Text ); command.Parameters.AddWithValue( "@Wert2", TextBox2.Text ); ... connection.Close(); connection.Dispose();
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community
- Bearbeitet Stefan FalzModerator Freitag, 4. Mai 2018 08:49
- Als Antwort vorgeschlagen Dimitar DenkovMicrosoft contingent staff, Administrator Montag, 7. Mai 2018 09:37
- Als Antwort markiert Pascal_1991 Montag, 14. Mai 2018 13:05
Alle Antworten
-
OleDbConnection con = new OleDbConnection("Provider=SQLOLEDB;Data Source=/Pia710/SQL_LVerwaltung;...
Hallo Pascal,
das Slash / vor dem Server Namen Pia810 gehört da nicht hin, der muss weg.
BTW, warum nutzt Du OleDbClient und nicht den für den SQL Server optimierten SqlClient?
Olaf Helper
[ Blog] [ Xing] [ MVP]- Als Antwort markiert Pascal_1991 Donnerstag, 3. Mai 2018 10:14
- Tag als Antwort aufgehoben Pascal_1991 Donnerstag, 3. Mai 2018 10:21
- Als Antwort vorgeschlagen Dimitar DenkovMicrosoft contingent staff, Administrator Montag, 7. Mai 2018 09:37
-
Bin noch relativ frisch im C# Gewerbe und habe den OleDb genutzt weil ich den vorher für eine Access Datenbank genutzt habe, bei der er auch funktionierte.
Danke für deine Antwort Habe nun die sql version davon genomen nun schriebt er mir in der Datatable variable nichts rein ist überhaupt eine Verbindung vorhanden ? Jedenfalls meckert er da nicht.private void button1_Click(object sender, EventArgs e)// Mehrere Login Forms anlegen oder Eine Schleife Catch Oder sowas { string sqlconnection =CustomerDatenbankPia.Properties.Settings.Default.LagerverwaltungPIAConnectionStringSQL; //liegt vileicht hier der fehler vor ? SqlConnection conn = new SqlConnection(sqlconnection);//bei manueller eingabe spuckt er mir fehler aus conn.Open(); SqlDataAdapter sda = new SqlDataAdapter("Select Role from [Customers] Where FullName ='" + txtBN.Text + "' and Password='" + txtPW.Text + "' ", conn); DataTable dt = new System.Data.DataTable(); sda.Fill(dt); // Hier sollte er eigentlich Admin reinschreiben tut er aber nicht in der datenbank ist die rolle vorhanden und es steht admin drin MessageBox.Show(sqlconnection.ToString()); if (dt.Rows.ToString() == "Admin") { rabool = true; NeuerBenutzer NB = new NeuerBenutzer(); this.Hide(); NB.Show(); Rolle = "Admin"; if (roleAdmin == txtBN.Text)//Testzwecke { rabool = true; } else { rabool = false; } } else if (dt.Rows[0][0].ToString() == "Anleiter") { rabool = true; NeuerBenutzer NB = new NeuerBenutzer(); this.Hide(); NB.Show(); Rolle = "Anleiter"; } else if (dt.Rows[0][0].ToString() == "Lagermitarbeiter") { rabool = false; //Test rabool =false; Form1 frm11 = new Form1();//testzwecke frm11.Show(); Rolle = "Lagermitarbeiter"; } else if (dt.Rows[0][0].ToString() == "Helfer") { Rolle = "Helfer"; } else { MessageBox.Show("Kein Zugriff"); } conn.Close(); }
-
- Als Antwort markiert Pascal_1991 Montag, 14. Mai 2018 13:04
-
Hallo Pascal,
was sollte "dt" auch beinhalten. Wenn Du dir die Variable "dt" ausgeben lässt, kommt maximal der Name der DataTable dabei raus, sonst nichts.
Die Inhalte siehst Du erst über die Rows und Columns.
"Admin" wird in der DataTable selbst durch deinen Code niemals stehen.
Wenn Du nur einen einzelnen Wert auslesen willst, ist das aber der falsche Code. In dem Fall solltest Du eher <SqlCommand>.ExecuteScalar() mit Auslesen des Rückgabewerts ausführen. Also bspw. so:
public String GetResult( SqlConnection _connection, String _sqlStatement ) { String result; SqlCommand command = new SqlCommand(); command.Connection = _connection; command.CommandText = _sqlStatement; command.CommandType = CommandType.Text; result = command.ExecuteScalar().ToString(); command.Dispose(); return result; }
Aufruf dann bspw. so:
String sql = "Select Role from [Customers] Where FullName ='" + txtBN.Text + "' and Password='" + txtPW.Text + "'"; String role = this.GetResult( conn, sql );
Die Stringverkettung und Integration von Variablen in das SQL Statement ist aber so ziemlich die schlechteste Idee, die Du haben kannst. Verwende durchgehend Parameter Objekte, bei SQL Server SqlParameter um die Werte einzubinden.
SqlConnection connection = new SqlConnection( "<ConnectionString>" ); connection.Open(); SqlCommand command = new SqlCommand( "SELECT ... FROM ... WHERE Feld1 = @Wert1 AND Feld2 = @Wert2", connection ); command.Parameters.AddWithValue( "@Wert1", TextBox1.Text ); command.Parameters.AddWithValue( "@Wert2", TextBox2.Text ); ... connection.Close(); connection.Dispose();
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community
- Bearbeitet Stefan FalzModerator Freitag, 4. Mai 2018 08:49
- Als Antwort vorgeschlagen Dimitar DenkovMicrosoft contingent staff, Administrator Montag, 7. Mai 2018 09:37
- Als Antwort markiert Pascal_1991 Montag, 14. Mai 2018 13:05
-
Hallo, habe nun folgendes eingebau, funktioniert auch soweit nur spricht er weder auf Case noch auf if an.
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.Data.Sql; using System.Data.SqlClient; namespace LagerverwaltungPIAWinForm { public partial class UCForm : Form { public string GetResult(SqlConnection _connection, String _sqlStatement) { string result; SqlCommand command = new SqlCommand(); command.Connection = _connection; command.CommandText = _sqlStatement; command.CommandType = CommandType.Text; result = command.ExecuteScalar().ToString(); command.Dispose(); return result; } public string Rolle; SqlConnection con = new SqlConnection(LagerverwaltungPIAWinForm.Properties.Settings.Default.LagerverwaltungPIAConnectionString);// Kein Gültiger Connectionstring SqlConnection conn = new SqlConnection("Data Source=192.168.10.6;Initial Catalog=LagerverwaltungPIA; User ID=RootProgramm; Password= root"); public UCForm() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { con.Open(); SqlDataAdapter sda = new SqlDataAdapter("Select Role from Customers where FullName='" + txtBN + "' and Password='" + txtPW + "' ", con); //SqlDataAdapter sda = new SqlDataAdapter("Select Role from customers", con); DataTable dt = new DataTable();//Fehler füllt anscheinend keine rows oder liegts am connectionsstring ? sda.Fill(dt);//? Count = 0 //SqlCommand da = new SqlCommand("Select Role from Customers where FullName ='" + txtBN + "' and Password='" + txtPW + "' ", con); string sql = "Select Role from [Customers] Where FullName ='" + txtBN.Text + "' and Password='" + txtPW.Text + "'"; string role = this.GetResult(con, sql); MessageBox.Show(role);//Steht "Role" drin // if (dt.Rows.Count == 1) // { switch (role)//Weder mit if noch mit case ruft er die gewollten daten auf
//Fehler gefunden er hat ein paar leerzeichen im String { case "Admin": { MessageBox.Show("You are an Admin"); break; } case "Anleiter": MessageBox.Show("You are an Anleiter"); break; case "Lager": MessageBox.Show("You are an An2leiter"); break; case "Helfer": MessageBox.Show("You are an A3nleiter"); break; default: MessageBox.Show("Bitte einen Gültigen Benutzernamen / Password eingeben!"); break; } con.Close(); }
- Bearbeitet Pascal_1991 Dienstag, 15. Mai 2018 09:59