Entwickler-Ecke
Datenbanken (inkl. ADO.NET) - InfoPath-Projekt: Übergabe einer Verbindung an Funktion
HannesA. - Fr 11.11.11 12:01
Titel: InfoPath-Projekt: Übergabe einer Verbindung an Funktion
Hallo liebe C# Gemeinde,
ich bin neu auf dem Gebiet C# und möchte ein Projekt für ein InfoPath Formular entwickeln. Im Moment probiere ich mich ein wenig an Datenverbindungen (für den Anfang mit Access) und hab bei einer Recherche folgenden Link gefunden:
Abrufen von Microsoft Access-AutoWert-Werten:
http://msdn.microsoft.com/de-de/library/ks9f57t0%28v=vs.80%29.aspx#Y1430 [
http://msdn.microsoft.com/de-de/library/ks9f57t0%28v=vs.80%29.aspx#Y1430]
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96:
| using Microsoft.Office.InfoPath; using System; using System.Windows.Forms; using System.Xml; using System.Xml.XPath; using mshtml; using System.Data; using System.Data.OleDb;
namespace Bestellungen { public partial class FormCode { public void InternalStartup() { ((ButtonEvent)EventManager.ControlEvents["CTRL31_5"]).Clicked += new ClickedEventHandler(CTRL31_5_Clicked); }
public void CTRL31_5_Clicked(object sender, ClickedEventArgs e) { write_database(); }
public void write_database() { OleDbConnection connection = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0}\\Bestelldaten.accdb"); OleDbDataAdapter adapter = new OleDbDataAdapter( "SELECT CategoryID, CategoryName FROM Categories ORDER BY CategoryID", connection);
adapter.InsertCommand = new OleDbCommand( "INSERT INTO Categories (CategoryName) Values(?)", connection); adapter.InsertCommand.CommandType = CommandType.Text; adapter.InsertCommand.Parameters.Add("@CategoryName", OleDbType.Char, 15, "CategoryName");
connection.Open(); DataSet categories = new DataSet(); adapter.Fill(categories, "Categories");
DataRow newRow = categories.Tables["Categories"].NewRow(); newRow["CategoryName"] = "New Category"; categories.Tables["Categories"].Rows.Add(newRow);
adapter.RowUpdated += new OleDbRowUpdatedEventHandler(OnRowUpdated);
adapter.Update(categories, "Categories");
connection.Close(); } protected static void OnRowUpdated( object sender, OleDbRowUpdatedEventArgs args) { int newID = 0; OleDbCommand idCMD = new OleDbCommand( "SELECT @@IDENTITY", connection);
if (args.StatementType == StatementType.Insert) { newID = (int)idCMD.ExecuteScalar(); MessageBox.Show(newID.ToString()); args.Row["CategoryID"] = newID; }
} } } |
Leider bekomme ich es nicht hin, die "connection" Variable an die Funktion "OnRowUpdated" zu übergeben.
Bisher habe ich es wie folgt versucht:
Funktionsdeklaration:
C#-Quelltext
1:
| public static void OnRowUpdated(OleDbConnection connection, object sender, OleDbRowUpdatedEventArgs args) |
Funktionsaufruf:
C#-Quelltext
1: 2:
| adapter.RowUpdated += new OleDbRowUpdatedEventHandler(OnRowUpdated(connection)); |
Dazu bekomme ich aber folgende Fehlermeldung:
Quelltext
1:
| Fehler 1 Keine Überladung für die OnRowUpdated-Methode nimmt 1 Argumente an. |
Wahrscheinlich ist es ganz einfach, aber so als Neuling kommt man auf die einfachsten Dinge manchmal nicht. :( Ich hoffe einer von Euch kann mir helfen.
Viele Grüße
Hannes
mats74 - Fr 11.11.11 14:39
Hallo Hannes und :welcome:
Deine Funktionsdeklaration weist drei Parameterwerte auf ...
C#-Quelltext
1:
| public static void OnRowUpdated(OleDbConnection connection, object sender, OleDbRowUpdatedEventArgs args) |
... und beim Funktionsaufruf gibst Du nur 1 Parameter mit?
C#-Quelltext
1:
| adapter.RowUpdated += new OleDbRowUpdatedEventHandler(OnRowUpdated(connection, ???, ???)); |
Das wird so also nicht funktionieren.
Da müsstest Du die fehlenden Parameter noch hinzufügen, damit die Überladung der Funktion gleichviele Argumente beinhaltet wie vorgegeben.
HannesA. - Sa 12.11.11 12:03
Hallo mats74,
vielen Dank für Deine Hilfe! Jetzt weiß ich, was diese Fehlermeldung zu bedeuten hat.
Leider wusste ich aber nicht, was ich für die anderen Parameter setzten sollte.
Außerdem erwartet die Methode nur "OleDbRowUpdatedEventHandler(void (object, OleDbRowUpdatedEventArgs) target).
Deshalb habe ich jetzt einfach die Variable "connection" für die gesamte Klasse deklariert.
Viele Grüße
Hannes
mats74 - Sa 12.11.11 15:11
Hallo Hannes
Das finde ich eine gute Lösung.
Ich habe in meinen Projekten auch übergeordnete Variablen (für temporär änderbare Inhalte) in den Klassen definiert, auf die ich jederzeit aus den verschiedenen Methoden zugreifen kann.
Das gibt Dir dann eine einfache Möglichkeit, die übergeordneten Daten in den Methoden entsprechend zu verarbeiten.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!