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
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
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!"
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
😃
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
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!