Laden...

C# String in SQL Abfrage verwenden

Erstellt von Telefsko vor 11 Jahren Letzter Beitrag vor 11 Jahren 2.377 Views
T
Telefsko Themenstarter:in
3 Beiträge seit 2012
vor 11 Jahren
C# String in SQL Abfrage verwenden

verwendetes Datenbanksystem: SQL
verwendete Umgebung: VS 2010 Ult / SQL Server 2008

Hallo,
Ich beschäftige mich grade mit einer Anwendung die ein Formular an eine SQL Datenbank übergibt in jeweils ein Datensatz. Beim Benutzer im Client wird der angmeldete Benutzername in ein String abgespeichert (Environment.UserName) und dann dann in die Datenbank. Dadurch soll dann wieder Beim Abrufen der Datensätze nur die vom jeweiligen Benutzer gespeicherten Datensätze Abrufbar sein.

Ich habe mir gedacht das man den String (Environment.UserName) in einer SQL Abfrage zu benutzen und dann sozusagen dann abzufragen ob ein Datensatz vorhanden ist wo der Client Benutzername mit dem einem in der SQL Tabelle übereinstimmt. Dieser Datensatz soll dann im DataGridView angezeigt werden.

Das ganze hat den Hintergrund einer Mitfahrzentrale.. Und man soll über diese Funktion dann seine eigenen EInträge verwalten können.

Ist das Möglich? Wenn ja, wie? oder gibt es da einen anderen Weg??

mfg
Telefsko

S
178 Beiträge seit 2009
vor 11 Jahren

Ja das geht, in dem du den Benutzer einfach als Parameter und schickst ein Prepared Statement ab.

Vielleicht mal folgendes als Denkanstoß:



string qry = "select Name, Adresse  from Mitfahrzentrale.Benutzer where Benutzer.Name  = ?"

        OdbcCommand cmd = new OdbcCommand(qry, conn);
   cmd.Parameters.AddWithValue("user",Environment.UserName)
 var reader = reader = cmd.ExecuteReader())
while (reader.Read())
                    {
//Ergebnismenge durchlaufen und die Werte der Spalten abrufen...
}

Entweder baust du das ganze mit dem DataTable/DataSet oder du erstellt dir einfach eine Liste mit den Objekten und hängst die an das DGV.
Dazu gibt es hier jede Menge Infos.

Ich habe das in dem o.g. Beispiel mal über eine einfach ODBC-Abfrage gemacht, beim SQL Server wirst du vermutlich OleDbCommand oder ähnliches verwenden
Nähere Infos: MSDN: DBCommand

6.911 Beiträge seit 2009
vor 11 Jahren

Hallo Telefsko,

siehe [Artikelserie] SQL: Parameter von Befehlen

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

T
Telefsko Themenstarter:in
3 Beiträge seit 2012
vor 11 Jahren

Hallo,
hmm hat mir leider nicht so viel weitergeholfen...
ich bin kein professioneller programmierer...
ich habe ein bisschen aus java mitgenommen und den rest zusammengebastelet....

also es ist so, dass ich die Tabelle die gefiltert werden soll in ein datagridview hole...

dazu habe ich zwei möglichkeiten...

1.

public partial class own : Form
    {
        delegate void BeginInvokeEmptyDelegate();
        delegate void BeginInvokeDelegate();

        private DataClasses1DataContext conn;
        public string usernamewin = Environment.UserName;

        public own()
        {
            this.conn = Program.conn;
            InitializeComponent();
            
        }

        private void view_Load(object sender, EventArgs e)
        {
            // TODO: Diese Codezeile lädt Daten in die Tabelle "mitfahrzentraleDataSet.Angebot". Sie können sie bei Bedarf verschieben oder entfernen.
            this.angebotTableAdapter.Fill(this.mitfahrzentraleDataSet.Angebot);
            Application.DoEvents();
           this.BeginInvoke(new BeginInvokeEmptyDelegate(this.InitializeDgv));
        }

        private void InitializeDgv()
        {
            var width1 = 40;
            var width2 = 130;
            var width3 = 60;

            this.dataGridView1.ReadOnly = true;
            this.dataGridView1.AutoGenerateColumns = false;

            this.dataGridView1.Columns.Add(
                new DataGridViewTextBoxColumn() {
                    DataPropertyName = "Angebotsart",
                    HeaderText = "Angebotsart",
                    Width = width3 + 8
                });
            this.dataGridView1.Columns.Add(
                new DataGridViewTextBoxColumn()
                {
                    DataPropertyName = "Angebotstyp",
                    HeaderText = "Angebotstyp",
                    Width = width2 + 15
                });
            this.dataGridView1.Columns.Add(
                new DataGridViewTextBoxColumn()
                {
                    DataPropertyName = "Abfahrtsort",
                    HeaderText = "Abfahrtsort",
                    Width = width2
                });
            this.dataGridView1.Columns.Add(
                new DataGridViewTextBoxColumn()
                {
                    DataPropertyName = "Ankunftsort",
                    HeaderText = "Ankunftsort",
                    Width = width2
                });
            this.dataGridView1.Columns.Add(
                new DataGridViewTextBoxColumn()
                {
                    DataPropertyName = "Abfahrsdatum",
                    HeaderText = "Abfahtrsdatum",
                    Width = 155
                });
            this.dataGridView1.Columns.Add(
                new DataGridViewTextBoxColumn()
                {
                    DataPropertyName = "AnzahlPlaetze",
                    HeaderText = "Anzahl Plätze",
                    Width = width1
                });
            this.dataGridView1.Columns.Add(
                new DataGridViewTextBoxColumn()
                {
                    DataPropertyName = "Name",
                    HeaderText = "Name",
                    Width = width2 + 15
                });
           ///this.dataGridView1.Columns.Add(
                ///new DataGridViewTextBoxColumn()
                ///{
                ///    DataPropertyName = "Name",
                /// Width = width2
                ///}); 
            this.dataGridView1.Columns.Add(
                new DataGridViewTextBoxColumn()
                {
                    DataPropertyName = "Mail",
                    HeaderText = "Mail",
                    Width = width2 + 130
                });
            this.dataGridView1.Columns.Add(
                new DataGridViewTextBoxColumn()
                {
                    DataPropertyName = "Telefon",
                    HeaderText = "Telefon",
                    Width = width2
                });
            this.dataGridView1.Columns.Add(
                new DataGridViewTextBoxColumn()
                {
                    DataPropertyName = "Bemerkung",
                    HeaderText = "Bemerkung",
                    Width = width2
                });
            this.dataGridView1.Columns.Add(
                new DataGridViewTextBoxColumn()
                {
                    DataPropertyName = "Ablauf",
                    HeaderText = "Ablauf",
                    Width = width2 + 17
                });
            try
            {

                this.dataGridView1.DataSource = new BindingList<Item>(this.conn.Angebot.Select(item => new Item(item)).ToList());
            }
            catch
            {
                global::System.Windows.Forms.MessageBox.Show("Fehler beim aufrufen der Tabelle");
            }
        }
        //item => new Item (item)
        private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {

        }

        private void Abbrechen_Click(object sender, EventArgs e)
        {
            this.BeginInvoke(new BeginInvokeDelegate(this.Close));
        }

        private void dataGridView2_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {

        } 
    }
}

oder 2. einfach man ein datagridview erstellen und oben in der ecke auf den pfeil klicken und die datenbank auswählen...

dazu muss ich sagen das auf den client pc's nur .net framework installiert ist kein sql client etc

😃

5.658 Beiträge seit 2006
vor 11 Jahren

hmm hat mir leider nicht so viel weitergeholfen...

Warum nicht? Was genau ist jetzt noch das Problem, nachdem du bereits mehrere Hinweise bekommen hast?

Christian

Weeks of programming can save you hours of planning

T
Telefsko Themenstarter:in
3 Beiträge seit 2012
vor 11 Jahren

Ja die Antworten haben mir schon einen Leichten anstoß gegeben... bin aber nicht zu einem Ergebnis gekommen.
Ich würde mich freue wenn jemand nochmal anhand einem meiner Beispiele mir einen Tipp geben könnte.

Vielen Dank!