Database über DataGrid updaten

  • C#
  • .NET 5–6

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von Yanbel.

    Database über DataGrid updaten

    Hallo, ich habe ein DataGrid in dem mir daten aus meiner Datenbank angezeigt werden. Wenn ich eine Zeile auswähle werden die daten in entsprechenden textboxen angezeigt, dh. der vorname wird in tbVorname andgezeigt. Jetzt würde ich gerne, wenn ich die textboxen bearbeite, die daten mit einem aktualisieren button geupdated werden. Das ist mein Code:

    C#-Quellcode

    1. private void Aktualisieren_Click(object sender, RoutedEventArgs e)
    2. {
    3. var sqlConnection = getSqlConnection();
    4. try
    5. {
    6. string query = "update MitgliedmitInfos (Vorname, Nachname, Land, Wohnort, Straße, Hausnummer, Emailadresse, Telefonnummer) values (@Vorname, @Nachname, @Land, @Wohnort, @Straße, @Hausnummer, @Emailadresse, @Telefonnummer) where Id = @Id";
    7. SqlCommand sqlCommand = new SqlCommand(query, sqlConnection);
    8. sqlConnection.Open();
    9. sqlCommand.Parameters.AddWithValue("@Id", grdMitglieder.SelectedItem);
    10. sqlCommand.Parameters.AddWithValue("@Vorname", tbVorname.Text);
    11. sqlCommand.Parameters.AddWithValue("@Nachname", tbNachname.Text);
    12. sqlCommand.Parameters.AddWithValue("@Land", tbLand.Text);
    13. sqlCommand.Parameters.AddWithValue("@Wohnort", tbStadt.Text);
    14. sqlCommand.Parameters.AddWithValue("@Straße", tbStraße.Text);
    15. sqlCommand.Parameters.AddWithValue("@Hausnummer", tbHausnr.Text);
    16. sqlCommand.Parameters.AddWithValue("@Emailadresse", tbEmail.Text);
    17. sqlCommand.Parameters.AddWithValue("@Telefonnummer", tbTelefon.Text);
    18. sqlCommand.ExecuteScalar();
    19. }
    20. catch (Exception ex)
    21. {
    22. MessageBox.Show(ex.ToString());
    23. }
    24. finally
    25. {
    26. sqlConnection.Close();
    27. FillDataGrid();
    28. }
    29. }


    Kann mir jemand helfen?

    LG Kathi

    *Topic verschoben*

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Marcus Gräfe“ ()

    Hey Kathi, kannst du noch den Code posten, wie die Daten im Grid landen? Dann kann ich dir da sicher helfen.

    EDIT: Oder wir fangen mal direkt an. Aus deinem Code-Beispiel schließe ich, dass du noch relativ neu in der Softwareentwicklung bist. Daher leite ich dich mal Schritt für Schritt durch die Basics. Es gibt ein paar Grundregeln die die generelle Entwicklung betreffen.

    Btw.: Mit der Architektur die du fährst hast du dir keinen Gefallen getan. SQL-Befehle an die Datenbank zu senden macht man heute eigentlich nicht mehr, weil es extrem aufwenig und auch sehr fehleranfällig ist. Hier gibt es sauberere Lösungen (Beispiel Entity Framework, typisierte Datasets, etc.). Das nur so am Rande. Aber ich gehe mal davon aus, dass du dich bewusst dafür entschieden hast.

    1.) Jedes Mal, wenn du mehrmals den gleichen Code schreibst, dann solltest du den Code auslagern. Statt beispielsweise immer wieder aufs neue eine SQL-Connections aufzubauen, kannst du dir eine Klasse mit Methoden schreiben, die das für dich übernimmt. Ich gebe dir hier ein Beispiel mit 4 Klassen, um es gleich sauber zu trennen. Namespaces lasse ich weg, die muss du dann selber dazuschreiben.

    DatabaseAccess

    C#-Quellcode

    1. public class DatabaseAccess
    2. {
    3. public int Timeout { get; set; }
    4. public Nullable<int> Identity { get; set; }
    5. public DataTable GetResultSet(string query, List<Parameter> parameters, bool silent, Setting setting = null)
    6. {
    7. try
    8. {
    9. DataTable result = new DataTable();
    10. SqlCredential cred = null;
    11. string constring = string.Empty;
    12. if (setting == null)
    13. {
    14. constring = Context.DatabaseConfig.GetConnectionString();
    15. cred = Context.DatabaseConfig.DefaultSetting.credentials;
    16. }
    17. else
    18. {
    19. constring = setting.GetConnectionString();
    20. cred = setting.credentials;
    21. }
    22. using (SqlConnection connection = new SqlConnection(constring, cred))
    23. {
    24. if (!(query.ToUpper().Contains("CREATE ") || query.ToUpper().Contains("ENABLE ") || query.ToUpper().Contains("DISABLE ")))
    25. {
    26. string newquery = "SET ARITHABORT ON";
    27. Framework.Text.Add(ref newquery, "SET DATEFORMAT dmy");
    28. Framework.Text.Add(ref newquery, query);
    29. query = newquery;
    30. }
    31. SqlCommand command = connection.CreateCommand();
    32. command.CommandType = CommandType.Text;
    33. command.CommandTimeout = Timeout;
    34. Timeout = 120;
    35. command.CommandText = query;
    36. if (parameters != null && parameters.Count > 0)
    37. {
    38. foreach (Parameter parameter in parameters)
    39. {
    40. if (parameter.Value != null)
    41. {
    42. command.Parameters.Add(parameter.GetSqlParameter());
    43. }
    44. else
    45. {
    46. command.Parameters.AddWithValue(parameter.Name, DBNull.Value);
    47. }
    48. }
    49. }
    50. if (connection.State != ConnectionState.Open)
    51. {
    52. connection.Open();
    53. }
    54. using (SqlDataAdapter reader = new SqlDataAdapter(command))
    55. {
    56. result.BeginLoadData();
    57. reader.Fill(result);
    58. result.EndLoadData();
    59. }
    60. }
    61. return result;
    62. }
    63. catch (Exception ex)
    64. {
    65. //Log-Methoden einfügen
    66. return null;
    67. }
    68. }
    69. public object GetResult(string query, dynamic defaultvalue, List<Parameter> parameters, bool silent, Setting setting = null)
    70. {
    71. try
    72. {
    73. object result;
    74. SqlCredential cred = null;
    75. string constring = string.Empty;
    76. if (setting == null)
    77. {
    78. constring = Context.DatabaseConfig.GetConnectionString();
    79. cred = Context.DatabaseConfig.credentials;
    80. }
    81. else
    82. {
    83. constring = setting.GetConnectionString();
    84. cred = setting.credentials;
    85. }
    86. using (SqlConnection connection = new SqlConnection(constring, cred))
    87. {
    88. if (!(query.ToUpper().Contains("CREATE ") || query.ToUpper().Contains("ENABLE ") || query.ToUpper().Contains("DISABLE ")))
    89. {
    90. string newquery = "SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED";
    91. Framework.Text.Add(ref newquery, "SET DATEFORMAT dmy");
    92. Framework.Text.Add(ref newquery, query);
    93. query = newquery;
    94. }
    95. SqlCommand command = connection.CreateCommand();
    96. command.CommandType = CommandType.Text;
    97. command.CommandTimeout = Timeout;
    98. Timeout = 120;
    99. command.CommandText = query;
    100. if (parameters != null && parameters.Count > 0)
    101. {
    102. foreach (Parameter parameter in parameters)
    103. {
    104. if (parameter.Value != null)
    105. {
    106. command.Parameters.Add(parameter.GetSqlParameter());
    107. }
    108. else
    109. {
    110. command.Parameters.AddWithValue(parameter.Name, DBNull.Value);
    111. }
    112. }
    113. }
    114. if (connection.State != ConnectionState.Open)
    115. {
    116. connection.Open();
    117. }
    118. SqlDataReader reader = command.ExecuteReader(CommandBehavior.SingleRow);
    119. if (reader == null || Convert.IsDBNull(reader) || !reader.HasRows)
    120. {
    121. result = defaultvalue;
    122. }
    123. else
    124. {
    125. reader.Read();
    126. if (reader.GetValue(0) == null || Convert.IsDBNull(reader.GetValue(0)))
    127. {
    128. result = defaultvalue;
    129. }
    130. else
    131. {
    132. result = reader.GetValue(0);
    133. }
    134. }
    135. connection.Close();
    136. connection.Dispose();
    137. }
    138. return result;
    139. }
    140. catch (Exception ex)
    141. {
    142. //Log-Methoden einfügen
    143. return null;
    144. }
    145. }
    146. public bool Execute(string statement, List<Parameter> parameters, bool silent, Setting setting = null)
    147. {
    148. try
    149. {
    150. SqlCredential cred = null;
    151. string constring = string.Empty;
    152. if (setting == null)
    153. {
    154. constring = Context.DatabaseConfig.GetConnectionString();
    155. cred = Context.DatabaseConfig.credentials;
    156. }
    157. else
    158. {
    159. constring = setting.GetConnectionString();
    160. cred = setting.credentials;
    161. }
    162. using (SqlConnection connection = new SqlConnection(constring, cred))
    163. {
    164. if (!(statement.ToUpper().Contains("CREATE ") || statement.ToUpper().Contains("ENABLE ") || statement.ToUpper().Contains("DISABLE ")))
    165. {
    166. string newquery = "SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED ";
    167. Framework.Text.Add(ref newquery, "SET DATEFORMAT dmy ");
    168. Framework.Text.Add(ref newquery, statement);
    169. statement = newquery;
    170. }
    171. SqlCommand command = connection.CreateCommand();
    172. command.CommandType = CommandType.Text;
    173. command.CommandTimeout = Timeout;
    174. Timeout = 120;
    175. command.CommandText = statement;
    176. if (parameters != null && parameters.Count > 0)
    177. {
    178. foreach (Parameter parameter in parameters)
    179. {
    180. if (parameter.Value != null)
    181. {
    182. command.Parameters.Add(parameter.GetSqlParameter());
    183. }
    184. else
    185. {
    186. command.Parameters.AddWithValue(parameter.Name, DBNull.Value);
    187. }
    188. }
    189. }
    190. if (connection.State != ConnectionState.Open)
    191. {
    192. connection.Open();
    193. }
    194. int affected = command.ExecuteNonQuery();
    195. command.CommandText = "SELECT @@Identity";
    196. object ExecuteScalarValue = command.ExecuteScalar();
    197. if (!Convert.IsDBNull(ExecuteScalarValue) && ExecuteScalarValue != null)
    198. {
    199. Identity = Convert.ToInt32(ExecuteScalarValue);
    200. }
    201. else
    202. {
    203. Identity = null;
    204. }
    205. }
    206. return true;
    207. }
    208. catch (SqlException ex)
    209. {
    210. //Log-Methoden einfügen
    211. }
    212. catch (Exception ex)
    213. {
    214. //Log-Methoden einfügen
    215. }
    216. }
    217. }



    Dann fügst du dir eine weitere Klasse hinzu die du zum Beispiel "Parameter" nennst
    Parameter

    C#-Quellcode

    1. public class Parameter
    2. {
    3. public string Name { get; set; }
    4. public object Value { get; set; }
    5. public SqlParameter GetSqlParameter()
    6. {
    7. SqlParameter Param = new SqlParameter();
    8. if (Name.StartsWith("@")) { Param.ParameterName = Name; }
    9. else { Param.ParameterName = "@" + Name; }
    10. if (Value == null)
    11. {
    12. Param.SqlDbType = System.Data.SqlDbType.Variant;
    13. Param.Value = DBNull.Value;
    14. return Param;
    15. }
    16. else
    17. {
    18. switch (Value.GetType().Name.ToLower())
    19. {
    20. case "string":
    21. Param.SqlDbType = System.Data.SqlDbType.VarChar;
    22. Param.Value = Value.ToString();
    23. break;
    24. case "char":
    25. Param.SqlDbType = System.Data.SqlDbType.VarChar;
    26. Param.Value = Value.ToString();
    27. break;
    28. case "int":
    29. Param.SqlDbType = System.Data.SqlDbType.Int;
    30. Param.Value = Convert.ToInt32(Value);
    31. break;
    32. case "int32":
    33. Param.SqlDbType = System.Data.SqlDbType.Int;
    34. Param.Value = Convert.ToInt32(Value);
    35. break;
    36. case "long":
    37. Param.SqlDbType = System.Data.SqlDbType.BigInt;
    38. Param.Value = Convert.ToInt64(Value);
    39. break;
    40. case "int64":
    41. Param.SqlDbType = System.Data.SqlDbType.BigInt;
    42. Param.Value = Convert.ToInt64(Value);
    43. break;
    44. case "short":
    45. Param.SqlDbType = System.Data.SqlDbType.SmallInt;
    46. Param.Value = Convert.ToInt16(Value);
    47. break;
    48. case "int16":
    49. Param.SqlDbType = System.Data.SqlDbType.SmallInt;
    50. Param.Value = Convert.ToInt16(Value);
    51. break;
    52. case "bool":
    53. Param.SqlDbType = System.Data.SqlDbType.Bit;
    54. Param.Value = Convert.ToBoolean(Value);
    55. break;
    56. case "datetime":
    57. Param.SqlDbType = System.Data.SqlDbType.DateTime;
    58. Param.Value = Convert.ToDateTime(Value);
    59. break;
    60. case "double":
    61. Param.SqlDbType = System.Data.SqlDbType.Decimal;
    62. Param.Value = Convert.ToDouble(Value);
    63. break;
    64. case "single":
    65. Param.SqlDbType = System.Data.SqlDbType.Decimal;
    66. Param.Value = Convert.ToDouble(Value);
    67. break;
    68. case "decimal":
    69. Param.SqlDbType = System.Data.SqlDbType.Decimal;
    70. Param.Value = Convert.ToDouble(Value);
    71. break;
    72. default:
    73. if (Value.GetType().Name.ToLower().StartsWith("nullable"))
    74. {
    75. switch (Value.GetType().UnderlyingSystemType.Name.ToLower())
    76. {
    77. case "string":
    78. Param.SqlDbType = System.Data.SqlDbType.VarChar;
    79. Param.Value = Value.ToString();
    80. break;
    81. case "char":
    82. Param.SqlDbType = System.Data.SqlDbType.VarChar;
    83. Param.Value = Value.ToString();
    84. break;
    85. case "int":
    86. Param.SqlDbType = System.Data.SqlDbType.Int;
    87. Param.Value = Convert.ToInt32(Value);
    88. break;
    89. case "int32":
    90. Param.SqlDbType = System.Data.SqlDbType.Int;
    91. Param.Value = Convert.ToInt32(Value);
    92. break;
    93. case "long":
    94. Param.SqlDbType = System.Data.SqlDbType.BigInt;
    95. Param.Value = Convert.ToInt64(Value);
    96. break;
    97. case "int64":
    98. Param.SqlDbType = System.Data.SqlDbType.BigInt;
    99. Param.Value = Convert.ToInt64(Value);
    100. break;
    101. case "short":
    102. Param.SqlDbType = System.Data.SqlDbType.SmallInt;
    103. Param.Value = Convert.ToInt16(Value);
    104. break;
    105. case "int16":
    106. Param.SqlDbType = System.Data.SqlDbType.SmallInt;
    107. Param.Value = Convert.ToInt16(Value);
    108. break;
    109. case "bool":
    110. Param.SqlDbType = System.Data.SqlDbType.Bit;
    111. Param.Value = Convert.ToBoolean(Value);
    112. break;
    113. case "datetime":
    114. Param.SqlDbType = System.Data.SqlDbType.DateTime;
    115. Param.Value = Convert.ToDateTime(Value);
    116. break;
    117. case "double":
    118. Param.SqlDbType = System.Data.SqlDbType.Decimal;
    119. Param.Value = Convert.ToDouble(Value);
    120. break;
    121. case "single":
    122. Param.SqlDbType = System.Data.SqlDbType.Decimal;
    123. Param.Value = Convert.ToDouble(Value);
    124. break;
    125. case "decimal":
    126. Param.SqlDbType = System.Data.SqlDbType.Decimal;
    127. Param.Value = Convert.ToDouble(Value);
    128. break;
    129. default:
    130. Param.SqlDbType = System.Data.SqlDbType.VarChar;
    131. Param.Value = Value.ToString();
    132. break;
    133. }
    134. }
    135. else
    136. {
    137. Param.SqlDbType = System.Data.SqlDbType.VarChar;
    138. Param.Value = Value.ToString();
    139. break;
    140. }
    141. break;
    142. }
    143. }
    144. return Param;
    145. }
    146. }



    Und dann noch eine die du Configuration nennst:
    Configuration

    C#-Quellcode

    1. public class Configuration
    2. {
    3. public string Designation { get; set; }
    4. public string Host { get; set; }
    5. public string Database { get; set; }
    6. private string _User;
    7. public string User
    8. {
    9. set
    10. {
    11. if (!string.IsNullOrWhiteSpace(value))
    12. {
    13. _User = value;
    14. if (_password != null)
    15. {
    16. credentials = new SqlCredential(_User, _password);
    17. }
    18. }
    19. else
    20. {
    21. credentials = null;
    22. }
    23. }
    24. }
    25. private System.Security.SecureString _password;
    26. public string password
    27. {
    28. set
    29. {
    30. if (!string.IsNullOrWhiteSpace(value))
    31. {
    32. _password = new System.Security.SecureString();
    33. foreach (char c in value)
    34. {
    35. _password.AppendChar(c);
    36. }
    37. _password.MakeReadOnly();
    38. if (!string.IsNullOrWhiteSpace(_User))
    39. {
    40. credentials = new SqlCredential(_User, _password);
    41. }
    42. }
    43. else
    44. {
    45. credentials = null;
    46. }
    47. }
    48. }
    49. public SqlCredential credentials { get; set; }
    50. public string GetConnectionString()
    51. {
    52. if (credentials != null)
    53. {
    54. SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder(string.Concat("Data Source=", Host, ";Initial Catalog=", Database, ";"));
    55. builder.Remove("User ID");
    56. builder.Remove("Password");
    57. builder.IntegratedSecurity = false;
    58. return builder.ConnectionString;
    59. }
    60. else
    61. {
    62. SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder(string.Concat("Data Source=", Host, ";Initial Catalog=", Database, ";"));
    63. builder.Remove("User ID");
    64. builder.Remove("Password");
    65. builder.IntegratedSecurity = true;
    66. return builder.ConnectionString;
    67. }
    68. }
    69. }



    und zum Schluss noch eine statischen Klasse:

    "Context"

    C#-Quellcode

    C#-Quellcode

    1. public static class Context
    2. {
    3. public static Configuration DatabaseConfig { get; set;}
    4. }



    Zum Start deiner Application musst du dann noch folgenden Code (natürlich mit deinen eigenen Datenbank-Infos) einfügen:

    C#-Quellcode

    1. Context.DatabaseConfig = new Shared.Database.Setting { Host = "127.0.0.1", Database = "TestDB", User = "TestUser", password = "123456789" };


    Damit der Framework-Part abgeschlossen. Optimalerweise baust du jetzt noch einen Data-Layer, aber das würde hier jetzt den Rahmen sprengen. Also nur die "Quick and Dirty"-Variante:
    Code für die Form

    C#-Quellcode

    1. private bool InsertOrUpdateMitglied()
    2. {
    3. List<Parameter> Parameters = new List<Parameter>()
    4. {
    5. new Parameter() { Name = "@Id", Value = grdMitglieder.SelectedItem },
    6. new Parameter() { Name = "@Vorname", Value = tbVorname.Text },
    7. new Parameter() { Name = "@Nachname", Value = tbNachname.Text },
    8. new Parameter() { Name = "@Land", Value = tbLand.Text },
    9. new Parameter() { Name = "@Wohnort", Value = tbStadt.Text },
    10. new Parameter() { Name = "@Straße", Value = tbStraße.Text },
    11. new Parameter() { Name = "@Hausnummer", Value = tbHausnr.Text },
    12. new Parameter() { Name = "@Emailadresse", Value = tbEmail.Text },
    13. new Parameter() { Name = "@Telefonnummer", Value = tbTelefon.Text }
    14. };
    15. string Query = string.Empty;
    16. Add(ref Query, "IF NOT EXISTS ");
    17. Add(ref Query, "(SELECT * FROM MitgliedmitInfos ");
    18. Add(ref Query, "WHERE ");
    19. Add(ref Query, "AND Id = @Id");
    20. Add(ref Query, ") ");
    21. Add(ref Query, "INSERT INTO MitgliedmitInfos ");
    22. Add(ref Query, "( ");
    23. Add(ref Query, "Vorname, ");
    24. Add(ref Query, "Nachname, ");
    25. Add(ref Query, "Land, ");
    26. Add(ref Query, "Straße, ");
    27. Add(ref Query, "Hausnummer, ");
    28. Add(ref Query, "Emailadresse, ");
    29. Add(ref Query, "Telefon");
    30. Add(ref Query, ") ");
    31. Add(ref Query, "VALUES ");
    32. Add(ref Query, "( ");
    33. Add(ref Query, "@Vorname, ");
    34. Add(ref Query, "@Nachname, ");
    35. Add(ref Query, "@Land, ");
    36. Add(ref Query, "@Straße, ");
    37. Add(ref Query, "@Hausnummer, ");
    38. Add(ref Query, "@Emailadresse, ");
    39. Add(ref Query, "@Telefon");
    40. Add(ref Query, ") ");
    41. Add(ref Query, "ELSE ");
    42. Add(ref Query, "UPDATE MitgliedmitInfos ");
    43. Add(ref Query, "SET ");
    44. Add(ref Query, "Vorname = @Vorname, ");
    45. Add(ref Query, "Nachname = @Nachname, ");
    46. Add(ref Query, "Land = @Land, ");
    47. Add(ref Query, "Straße = @Straße, ");
    48. Add(ref Query, "Hausnummer = @Hausnummer, ");
    49. Add(ref Query, "Emailadresse = @Emailadresse, ");
    50. Add(ref Query, "Telefon = @Telefon");
    51. Add(ref Query, "WHERE ");
    52. Add(ref Query, "AND Id = @Id");
    53. DatabaseAccess DBAccessor = new DatabaseAccess();
    54. return DBAccessor.Execute(Query, Parameters, false);
    55. }
    56. private void Add(ref string Text, string AddText)
    57. {
    58. if (string.IsNullOrWhiteSpace(Text))
    59. {
    60. Text = AddText;
    61. }
    62. else
    63. {
    64. Text = Text + Environment.NewLine + AddText;
    65. }
    66. }
    67. private void Aktualisieren_Click(object sender, RoutedEventArgs e)
    68. {
    69. InsertOrUpdateMitglied();
    70. }



    Der Vorteil an dieser Stelle ist, egal an welcher Stelle du jetzt ein Mitglied updaten willst, an welcher Stelle du dich zur Datenbank verbinden willst, es reichen diese zwei Zeilen um einen Befehl zu senden:

    C#-Quellcode

    1. (new DatabaseAccess()).Execute("SQLBefehl", Parameters, false);

    oder Daten abzurufen:

    C#-Quellcode

    1. DataTable ResultSet = (new DatabaseAccess()).GetResultSet("SQLBefehl", Parameters, false);


    Wenn ich weiß wie deine Daten ins DataGridView geladen werden, dann machen wir den Rest, falls du Interesse hast.


    Ein Computer wird das tun, was du programmierst - nicht das, was du willst.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Yanbel“ ()

    Hi Yanbel, vielen danke, ich arbeite mit einem DataGrid, nicht DataGridView, ich weiß nicht inwiefern das einen unterschied macht.

    Das ist mein Code um das DataGrid zu füllen

    C#-Quellcode

    1. private void FillDataGrid()
    2. {
    3. var sqlConnection = getSqlConnection();
    4. try
    5. {
    6. string CmdString = string.Empty;
    7. using (SqlConnection con = getSqlConnection())
    8. {
    9. CmdString = "SELECT * FROM MitgliedmitInfos";
    10. SqlCommand cmd = new SqlCommand(CmdString, con);
    11. SqlDataAdapter sda = new SqlDataAdapter(cmd);
    12. DataTable dt = new DataTable();
    13. sda.Fill(dt);
    14. grdMitglieder.ItemsSource = dt.DefaultView;
    15. }
    16. }
    17. catch (Exception e)
    18. {
    19. MessageBox.Show(e.ToString());
    20. }
    21. }


    Ich habe meine DataBase Connection so hergestellt:

    C#-Quellcode

    1. private SqlConnection getSqlConnection()
    2. {
    3. string ConString = ConfigurationManager.ConnectionStrings["ConString"].ConnectionString;
    4. SqlConnection sqlConnection = new SqlConnection(ConString);
    5. return sqlConnection;
    6. }


    Ich lade hier mal meinen gesamten code hoch:
    Spoiler anzeigen

    C#-Quellcode

    1. using System;
    2. using System.Configuration;
    3. using System.Data;
    4. using System.Data.OleDb;
    5. using System.Data.SqlClient;
    6. using System.Windows;
    7. using System.Windows.Controls;
    8. namespace Projekt
    9. {
    10. public partial class Window2 : Window
    11. {
    12. public Window2()
    13. {
    14. InitializeComponent();
    15. FillDataGrid();
    16. }
    17. private void FillDataGrid()
    18. {
    19. var sqlConnection = getSqlConnection();
    20. try
    21. {
    22. string CmdString = string.Empty;
    23. using (SqlConnection con = getSqlConnection())
    24. {
    25. CmdString = "SELECT * FROM MitgliedmitInfos";
    26. SqlCommand cmd = new SqlCommand(CmdString, con);
    27. SqlDataAdapter sda = new SqlDataAdapter(cmd);
    28. DataTable dt = new DataTable();
    29. sda.Fill(dt);
    30. grdMitglieder.ItemsSource = dt.DefaultView;
    31. }
    32. }
    33. catch (Exception e)
    34. {
    35. MessageBox.Show(e.ToString());
    36. }
    37. }
    38. private SqlConnection getSqlConnection()
    39. {
    40. string ConString = ConfigurationManager.ConnectionStrings["ConString"].ConnectionString;
    41. SqlConnection sqlConnection = new SqlConnection(ConString);
    42. return sqlConnection;
    43. }
    44. private void Save()
    45. {
    46. var sqlConnection = getSqlConnection();
    47. try
    48. {
    49. string query = "insert into MitgliedmitInfos (Vorname, Nachname, Land, Wohnort, Straße, Hausnummer, Emailadresse, Telefonnummer) values (@Vorname, @Nachname, @Land, @Wohnort, @Straße, @Hausnummer, @Emailadresse, @Telefonnummer)";
    50. SqlCommand sqlCommand = new SqlCommand(query, sqlConnection);
    51. sqlConnection.Open();
    52. sqlCommand.Parameters.AddWithValue("@Vorname", tbVorname.Text);
    53. sqlCommand.Parameters.AddWithValue("@Nachname", tbNachname.Text);
    54. sqlCommand.Parameters.AddWithValue("@Land", tbLand.Text);
    55. sqlCommand.Parameters.AddWithValue("@Wohnort", tbStadt.Text);
    56. sqlCommand.Parameters.AddWithValue("@Straße", tbStraße.Text);
    57. sqlCommand.Parameters.AddWithValue("@Hausnummer", tbHausnr.Text);
    58. sqlCommand.Parameters.AddWithValue("@Emailadresse", tbEmail.Text);
    59. sqlCommand.Parameters.AddWithValue("@Telefonnummer", tbTelefon.Text);
    60. sqlCommand.ExecuteScalar();
    61. }
    62. catch (Exception ex)
    63. {
    64. MessageBox.Show(ex.ToString());
    65. }
    66. finally
    67. {
    68. sqlConnection.Close();
    69. FillDataGrid();
    70. }
    71. }
    72. private void ButtonSpeichern_Click(object sender, RoutedEventArgs e)
    73. {
    74. Save();
    75. }
    76. private void Löschen_Click(object sender, RoutedEventArgs e)
    77. {
    78. var selectedItem = (DataRowView)grdMitglieder.SelectedItem;
    79. var sId = selectedItem["Id"].ToString();
    80. var id = selectedItem.Row.Field<int>("Id");
    81. var sqlConnection = getSqlConnection();
    82. try
    83. {
    84. string query = "delete from MitgliedmitInfos where Id = @MitgliedId";
    85. SqlCommand sqlcommand = new SqlCommand(query, sqlConnection);
    86. sqlConnection.Open();
    87. sqlcommand.Parameters.AddWithValue("@MitgliedId", id);
    88. sqlcommand.ExecuteScalar();
    89. }
    90. catch (Exception)
    91. {
    92. MessageBox.Show("Fehler beim Löschen, bite geben Sie eine existierende Id an");
    93. }
    94. finally
    95. {
    96. sqlConnection.Close();
    97. FillDataGrid();
    98. }
    99. }
    100. private void Aktualisieren_Click(object sender, RoutedEventArgs e)
    101. {
    102. var sqlConnection = getSqlConnection();
    103. try
    104. {
    105. string query = "update MitgliedmitInfos (Vorname, Nachname, Land, Wohnort, Straße, Hausnummer, Emailadresse, Telefonnummer) values (@Vorname, @Nachname, @Land, @Wohnort, @Straße, @Hausnummer, @Emailadresse, @Telefonnummer) where Id = @Id";
    106. SqlCommand sqlCommand = new SqlCommand(query, sqlConnection);
    107. sqlConnection.Open();
    108. sqlCommand.Parameters.AddWithValue("@Id", grdMitglieder.SelectedItem);
    109. sqlCommand.Parameters.AddWithValue("@Vorname", tbVorname.Text);
    110. sqlCommand.Parameters.AddWithValue("@Nachname", tbNachname.Text);
    111. sqlCommand.Parameters.AddWithValue("@Land", tbLand.Text);
    112. sqlCommand.Parameters.AddWithValue("@Wohnort", tbStadt.Text);
    113. sqlCommand.Parameters.AddWithValue("@Straße", tbStraße.Text);
    114. sqlCommand.Parameters.AddWithValue("@Hausnummer", tbHausnr.Text);
    115. sqlCommand.Parameters.AddWithValue("@Emailadresse", tbEmail.Text);
    116. sqlCommand.Parameters.AddWithValue("@Telefonnummer", tbTelefon.Text);
    117. sqlCommand.ExecuteScalar();
    118. }
    119. catch (Exception ex)
    120. {
    121. MessageBox.Show(ex.ToString());
    122. }
    123. finally
    124. {
    125. sqlConnection.Close();
    126. FillDataGrid();
    127. }
    128. }
    129. private void GrdMitglieder_SelectionChanged(object sender, SelectionChangedEventArgs e)
    130. {
    131. var sqlConnection = getSqlConnection();
    132. try
    133. {
    134. var selectedItem = (DataRowView)grdMitglieder.SelectedItem;
    135. var sId = selectedItem["Id"].ToString();
    136. var id = selectedItem.Row.Field<int>("Id");
    137. string query = "select Vorname, Nachname, Land, Wohnort, Straße, Hausnummer, Emailadresse, Telefonnummer from MitgliedmitInfos where Id = @Id";
    138. SqlCommand sqlCommand = new SqlCommand(query, sqlConnection);
    139. SqlDataAdapter sqlDataAdapter = new SqlDataAdapter(sqlCommand);
    140. using (sqlDataAdapter)
    141. {
    142. sqlCommand.Parameters.AddWithValue("@Id", id);
    143. DataTable mitgliedTable = new DataTable();
    144. sqlDataAdapter.Fill(mitgliedTable);
    145. tbVorname.Text = mitgliedTable.Rows[0]["Vorname"].ToString();
    146. tbNachname.Text = mitgliedTable.Rows[0]["Nachname"].ToString();
    147. tbLand.Text = mitgliedTable.Rows[0]["Land"].ToString();
    148. tbStadt.Text = mitgliedTable.Rows[0]["Wohnort"].ToString();
    149. tbStraße.Text = mitgliedTable.Rows[0]["Straße"].ToString();
    150. tbHausnr.Text = mitgliedTable.Rows[0]["Hausnummer"].ToString();
    151. tbEmail.Text = mitgliedTable.Rows[0]["Emailadresse"].ToString();
    152. tbTelefon.Text = mitgliedTable.Rows[0]["Telefonnummer"].ToString();
    153. }
    154. }
    155. catch (Exception ex)
    156. {
    157. //MessageBox.Show(ex.ToString());
    158. }
    159. }
    160. }
    161. }

    XML-Quellcode

    1. <Window x:Class="Projekt.Window2"
    2. xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    3. xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    4. xmlns:Icon="http://metro.mahapps.com/winfx/xaml/iconpacks"
    5. Title="Window2" Height="720" Width="1080">
    6. <Grid>
    7. <DataGrid Name="grdMitglieder" HorizontalAlignment="Left" Height="539" Margin="10,13,0,0" VerticalAlignment="Top" Width="1057" SelectionChanged="GrdMitglieder_SelectionChanged"/>
    8. <TextBox Name="tbVorname" HorizontalAlignment="Left" Height="23" Margin="11,557,0,0" TextWrapping="Wrap" Text="Vorname" VerticalAlignment="Top" Width="120"/>
    9. <TextBox Name="tbNachname" HorizontalAlignment="Left" Height="23" Margin="136,557,0,0" TextWrapping="Wrap" Text="Nachname" VerticalAlignment="Top" Width="120"/>
    10. <TextBox Name="tbLand" HorizontalAlignment="Left" Height="23" Margin="11,585,0,0" TextWrapping="Wrap" Text="Land" VerticalAlignment="Top" Width="120"/>
    11. <TextBox Name="tbStadt" HorizontalAlignment="Left" Height="23" Margin="136,585,0,0" TextWrapping="Wrap" Text="Stadt" VerticalAlignment="Top" Width="120"/>
    12. <TextBox Name="tbStraße" HorizontalAlignment="Left" Height="23" Margin="261,571,0,0" TextWrapping="Wrap" Text="Straße" VerticalAlignment="Top" Width="120" RenderTransformOrigin="0.5,0.478"/>
    13. <TextBox Name="tbHausnr" HorizontalAlignment="Left" Height="23" Margin="261,599,0,0" TextWrapping="Wrap" Text="Hausnummer" VerticalAlignment="Top" Width="120"/>
    14. <TextBox Name="tbEmail" HorizontalAlignment="Left" Height="23" Margin="11,613,0,0" TextWrapping="Wrap" Text="Emailadresse" VerticalAlignment="Top" Width="120"/>
    15. <TextBox Name="tbTelefon" HorizontalAlignment="Left" Height="23" Margin="136,613,0,0" TextWrapping="Wrap" Text="Telefonnummer" VerticalAlignment="Top" Width="120"/>
    16. <Button Name="Speichern" Content="Speichern" HorizontalAlignment="Left" Margin="938,557,0,53" Width="129" Click="ButtonSpeichern_Click"/>
    17. <Button Name="Löschen" Content="Löschen" HorizontalAlignment="Left" Margin="804,557,0,0" VerticalAlignment="Top" Width="129" Height="79" Click="Löschen_Click"/>
    18. <Button Content="Aktualisieren" HorizontalAlignment="Left" Margin="666,557,0,0" VerticalAlignment="Top" Width="133" Height="79" Click="Aktualisieren_Click"/>
    19. </Grid>
    20. </Window>


    *Code-Tag korrigiert, Spoiler wg. überlangem Code eingefügt*

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Marcus Gräfe“ ()

    C#-Quellcode

    1. sqlCommand.Parameters.AddWithValue("@Id", grdMitglieder.SelectedItem);


    Das dürfte dein Problem sein. In der Löschen-Methode hast du das so geschrieben:

    C#-Quellcode

    1. var selectedItem = (DataRowView)grdMitglieder.SelectedItem;
    2. var sId = selectedItem["Id"].ToString();
    3. var id = selectedItem.Row.Field<int>("Id");
    4. ...
    5. sqlCommand.Parameters.AddWithValue("@Id", id);


    Kann das leider gerade nicht nachstellen oder testen. Ist nur eine Vermutung.

    EDIT: Ich habe dir mal ein Projekt gebastelt, wie ich die Datenstruktur innerhalb deiner Architektur aufsetzen würde. Das dürfte dir das Leben an der Stelle deutlich erleichtern.

    Du kannst dann jede Bearbeitung mit einer Zeile Programmcode machen:

    C#-Quellcode

    1. grdMitglieder.ItemsSource = Mitglied.Create().Get(new Data.Parameters.Mitglied()).ToDataTable().DefaultView();
    Dateien
    • Projekt.zip

      (127,73 kB, 77 mal heruntergeladen, zuletzt: )


    Ein Computer wird das tun, was du programmierst - nicht das, was du willst.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Yanbel“ ()

    Hab es gelöst, ich habe speichern und updaten auf einen button zusammen gefasst, das ist der code dafür:

    C#-Quellcode

    1. private void SpeichernUpdateMitglied()
    2. {
    3. try
    4. {
    5. var selectedItem = (DataRowView)grdMitglieder.SelectedItem;
    6. var sId = selectedItem["Id"].ToString();
    7. var id = selectedItem.Row.Field<int>("Id");
    8. var sqlConnection = getSqlConnection();
    9. try
    10. {
    11. string query = "update MitgliedmitInfos Set Vorname = @Vorname, Nachname = @Nachname, Land = @Land, Wohnort = @Wohnort, Straße = @Straße, Hausnummer = @Hausnummer, Emailadresse = @Emailadresse, Telefonnummer = @Telefonnummer, Age = @Age where Id = @Id";
    12. SqlCommand sqlCommand = new SqlCommand(query, sqlConnection);
    13. sqlConnection.Open();
    14. sqlCommand.Parameters.AddWithValue("@Id", id);
    15. sqlCommand.Parameters.AddWithValue("@Vorname", tbVorname.Text);
    16. sqlCommand.Parameters.AddWithValue("@Nachname", tbNachname.Text);
    17. sqlCommand.Parameters.AddWithValue("@Land", tbLand.Text);
    18. sqlCommand.Parameters.AddWithValue("@Wohnort", tbStadt.Text);
    19. sqlCommand.Parameters.AddWithValue("@Straße", tbStraße.Text);
    20. sqlCommand.Parameters.AddWithValue("@Hausnummer", tbHausnr.Text);
    21. sqlCommand.Parameters.AddWithValue("@Emailadresse", tbEmail.Text);
    22. sqlCommand.Parameters.AddWithValue("@Telefonnummer", tbTelefon.Text);
    23. sqlCommand.Parameters.AddWithValue("@Age", tbAlter.Text);
    24. sqlCommand.ExecuteScalar();
    25. }
    26. catch (Exception ex)
    27. {
    28. MessageBox.Show(ex.ToString());
    29. }
    30. finally
    31. {
    32. sqlConnection.Close();
    33. FillDataGrid();
    34. }
    35. }
    36. catch
    37. {
    38. var sqlConnection = getSqlConnection();
    39. try
    40. {
    41. string query = "insert into MitgliedmitInfos (Vorname, Nachname, Land, Wohnort, Straße, Hausnummer, Emailadresse, Telefonnummer, Age) values (@Vorname, @Nachname, @Land, @Wohnort, @Straße, @Hausnummer, @Emailadresse, @Telefonnummer, @Age)";
    42. SqlCommand sqlCommand = new SqlCommand(query, sqlConnection);
    43. sqlConnection.Open();
    44. sqlCommand.Parameters.AddWithValue("@Vorname", tbVorname.Text);
    45. sqlCommand.Parameters.AddWithValue("@Nachname", tbNachname.Text);
    46. sqlCommand.Parameters.AddWithValue("@Land", tbLand.Text);
    47. sqlCommand.Parameters.AddWithValue("@Wohnort", tbStadt.Text);
    48. sqlCommand.Parameters.AddWithValue("@Straße", tbStraße.Text);
    49. sqlCommand.Parameters.AddWithValue("@Hausnummer", tbHausnr.Text);
    50. sqlCommand.Parameters.AddWithValue("@Emailadresse", tbEmail.Text);
    51. sqlCommand.Parameters.AddWithValue("@Telefonnummer", tbTelefon.Text);
    52. sqlCommand.Parameters.AddWithValue("@Age", tbAlter.Text);
    53. sqlCommand.ExecuteScalar();
    54. }
    55. catch (Exception ex)
    56. {
    57. MessageBox.Show(ex.ToString());
    58. }
    59. finally
    60. {
    61. sqlConnection.Close();
    62. FillDataGrid();
    63. }
    64. }
    65. }


    Weiß nicht recht wo da mein Fehler lag, aber so funktioniert es
    Nicht schön. Knallt jedes mal auf einen Fehler, wenn ein neues Mitglied angelegt wird.

    Dann lös das lieber im SQL:

    C#-Quellcode

    1. Statement = "IF NOT EXISTS ");
    2. Statement += Environment.NewLine + "(SELECT * FROM MitgliedmitInfos ";
    3. Statement += Environment.NewLine + "WHERE 1 = 1 ";
    4. Statement += Environment.NewLine + "AND Id = @Id";
    5. Statement += Environment.NewLine + ") ";
    6. Statement += Environment.NewLine + "INSERT INTO MitgliedmitInfos ";
    7. Statement += Environment.NewLine + "( ");
    8. Statement += Environment.NewLine + "Vorname, ";
    9. Statement += Environment.NewLine + "Nachname, ";
    10. Statement += Environment.NewLine + "Land, ";
    11. Statement += Environment.NewLine + "Straße, ";
    12. Statement += Environment.NewLine + "Hausnummer, ";
    13. Statement += Environment.NewLine + "Emailadresse, ";
    14. Statement += Environment.NewLine + "Telefon";
    15. Statement += Environment.NewLine + ") ";
    16. Statement += Environment.NewLine + "VALUES ";
    17. Statement += Environment.NewLine + "( ";
    18. Statement += Environment.NewLine + "@Vorname, ";
    19. Statement += Environment.NewLine + "@Nachname, ";
    20. Statement += Environment.NewLine + "@Land, ";
    21. Statement += Environment.NewLine + "@Straße, ";
    22. Statement += Environment.NewLine + "@Hausnummer, ";
    23. Statement += Environment.NewLine + "@Emailadresse, ";
    24. Statement += Environment.NewLine + "@Telefon";
    25. Statement += Environment.NewLine + ") ";
    26. Statement += Environment.NewLine + "ELSE ";
    27. Statement += Environment.NewLine + "UPDATE MitgliedmitInfos ";
    28. Statement += Environment.NewLine + "SET ";
    29. Statement += Environment.NewLine + "Vorname = @Vorname, ";
    30. Statement += Environment.NewLine + "Nachname = @Nachname, ";
    31. Statement += Environment.NewLine + "Land = @Land, ";
    32. Statement += Environment.NewLine + "Straße = @Straße, ";
    33. Statement += Environment.NewLine + "Hausnummer = @Hausnummer, ";
    34. Statement += Environment.NewLine + "Emailadresse = @Emailadresse, ";
    35. Statement += Environment.NewLine + "Telefon = @Telefon";
    36. Statement += Environment.NewLine + "WHERE 1 = 1 ";
    37. Statement += Environment.NewLine + "AND Id = @Id";



    Ein Computer wird das tun, was du programmierst - nicht das, was du willst.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Yanbel“ ()