Arbeiten Sie mit der MySQL-Datenbank in C#
View more Tutorials:
Im Dokument führe ich Sie bei dem Umgang mit MySQL Database aus C#. Das Ziel schließt ein:
- Query
- Insert
- Update
- Delete
- Aufruf von der Funktion, der Verfahren aus C#,...

Das Dokument benutzt SIMPLEHR. Ein Database Schema als Beispiel wird mehrmals in viele Hinweise in o7planning.org verwendet. Sie können das Schema auf Oracle, MySQL oder SQL Server erstellen. Sie können die Hinweise bei... sehen:
Erstellen Sie ein Projekt CsMySQLTutorial:

Das Project wurde erstellt.


Sie sollen die Bibliothek zur Verbindung ins MySQL erklären und brauchen eine Utility-Klasse (DBUtils.cs) zur Verbindung in die Database. Mit MySQL Database können Sie die Anleitung bei ... sehen:

DBMySQLUtils.cs
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using MySql.Data.MySqlClient; namespace Tutorial.SqlConn { class DBMySQLUtils { public static MySqlConnection GetDBConnection(string host, int port, string database, string username, string password) { // Connection String. String connString = "Server=" + host + ";Database=" + database + ";port=" + port + ";User Id=" + username + ";password=" + password; MySqlConnection conn = new MySqlConnection(connString); return conn; } } }
DBUtils.cs
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using MySql.Data.MySqlClient; namespace Tutorial.SqlConn { class DBUtils { public static MySqlConnection GetDBConnection() { string host = "192.168.205.130"; int port = 3306; string database = "simplehr"; string username = "root"; string password = "1234"; return DBMySQLUtils.GetDBConnection(host, port, database, username, password); } } }

Im C# verwendet Sie beim Umgang mit MySQL Database, wie query, insert, update, delete ein Objekt MySqlCommand, MySqlCommand - eine Klasse wird aus DbCommand ausgeweitert. Falls Sie query, insert,update oder delete in der Oracle Database brauchen, sollen Sie OracleCommand benutzen, oder SqlCommand für SQL Server benutzen. Leider ist es Ihnen sehr schwierig, eine Source Code für die unterschiedlichen Database zu benutzen
Sie können das Objekt MySqlCommand erstellen um mit MySQL Database zu arbeiten
MySqlConnection conn = DBUtils.GetDBConnection(); // Way 1: // Create a command associated with the Connection. MySqlCommand cmd = conn.CreateCommand(); // Set Command Text cmd.CommandText = sql; // Way 2 : // Create a Command MySqlCommand cmd = new MySqlCommand(sql); // Set connection for command. cmd.Connection = conn; // Way 3: // Create a command associated with the Connection. MySqlCommand cmd = new MySqlCommand(sql, conn);
Das Beispiel für die Abfrage der Daten durch die Benutzung von C#.

QueryDataExample.cs
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Tutorial.SqlConn; using System.Data.Common; using MySql.Data.MySqlClient; namespace CsMySQLTutorial { class QueryDataExample { static void Main(string[] args) { // Das Objekt Connection verbindend in DB entnehmen // @@ (2) // Die Verbindung schließen. MySqlConnection conn = DBUtils.GetDBConnection(); conn.Open(); try { QueryEmployee(conn); } catch (Exception e) { Console.WriteLine("Error: " + e); Console.WriteLine(e.StackTrace); } finally { // (2) conn.Close(); // Das Objekt entfernen, die Ressourcen freien. conn.Dispose(); } Console.Read(); } private static void QueryEmployee(MySqlConnection conn) { string sql = "Select Emp_Id, Emp_No, Emp_Name, Mng_Id from Employee"; // Ein Objekt Command erstellen. MySqlCommand cmd = new MySqlCommand(); // Die Verbindung zwischen Command mit Connection. cmd.Connection = conn; cmd.CommandText = sql; using (DbDataReader reader = cmd.ExecuteReader()) { if (reader.HasRows) { while (reader.Read()) { // Die Index einer Spalte Emp_ID im Befehl SQL. int empIdIndex = reader.GetOrdinal("Emp_Id"); // 0 long empId = Convert.ToInt64(reader.GetValue(0)); // Die Spalte Emp_No mit index = 1. string empNo = reader.GetString(1); int empNameIndex = reader.GetOrdinal("Emp_Name");// 2 string empName = reader.GetString(empNameIndex); // Die Index der Spalte Mng_Id im Befehl SQL. int mngIdIndex = reader.GetOrdinal("Mng_Id"); long? mngId = null; // Prüfen, ob die Wert der Spalte null oder nicht ist if (!reader.IsDBNull(mngIdIndex)) { mngId = Convert.ToInt64(reader.GetValue(mngIdIndex)); } Console.WriteLine("--------------------"); Console.WriteLine("empIdIndex:" + empIdIndex); Console.WriteLine("EmpId:" + empId); Console.WriteLine("EmpNo:" + empNo); Console.WriteLine("EmpName:" + empName); Console.WriteLine("MngId:" + mngId); } } } } } }
Das Beispiel durchführen

Achtung: Der Befehl using ist benutzt um zu guarantieren, dass das Objekt nach dem Austritt der Bereich ohne die Anforderung nach einer illustrierten Code gelöscht (dispose) wird// Den Schlüsselwort 'using' für das Objekt mit dem Typ IDispose benutzen. // (als Objekt von Interface IDispose). using (DbDataReader reader = cmd.ExecuteReader()) { // Code benutzt reader } // Äquivalent mit dem traditionellen Aufschreiben. DbDataReader reader = cmd.ExecuteReader(); try { // Code benutzt reader } finally { // Die Aufruf auf die Methode um das Objekt zu zerstören // Die Ressoucen freien reader.Dispose(); }
Das folgende Beispiel: einen Rekord (record) in der Tabelle Salary_Grade.einfügen
InsertDataExample.cs
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Tutorial.SqlConn; using System.Data.Common; using System.Data; using MySql.Data.MySqlClient; namespace CsMySQLTutorial { class InsertDataExample { static void Main(string[] args) { // Die Verbindung zur DB entnehmen. MySqlConnection connection = DBUtils.GetDBConnection(); connection.Open(); try { // Der Befehl Insert. string sql = "Insert into Salary_Grade (Grade, High_Salary, Low_Salary) " + " values (@grade, @highSalary, @lowSalary) "; MySqlCommand cmd = connection.CreateCommand(); cmd.CommandText = sql; // Ein Objekt Parameter erstellen. MySqlParameter gradeParam = new MySqlParameter("@grade",SqlDbType.Int); gradeParam.Value = 3; cmd.Parameters.Add(gradeParam); // Den Parameter @highSalary (kürzer geschrieben) einfügen. MySqlParameter highSalaryParam = cmd.Parameters.Add("@highSalary", SqlDbType.Float); highSalaryParam.Value = 20000; // Den Parameter @lowSalary (mehr kürzer) einfügen. cmd.Parameters.Add("@lowSalary", SqlDbType.Float ).Value = 10000; // Command durchführen (für delete, insert, update). int rowCount = cmd.ExecuteNonQuery(); Console.WriteLine("Row Count affected = " + rowCount); } catch (Exception e) { Console.WriteLine("Error: " + e); Console.WriteLine(e.StackTrace); } finally { connection.Close(); connection.Dispose(); connection = null; } Console.Read(); } } }
Das Beispiel durchführen


Das Beispiel: Update im C#.
UpdateExample.cs
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using MySql.Data.MySqlClient; using Tutorial.SqlConn; using System.Data; namespace CsMySQLTutorial { class UpdateExample { static void Main(string[] args) { MySqlConnection conn = DBUtils.GetDBConnection(); conn.Open(); try { string sql = "Update Employee set Salary = @salary where Emp_Id = @empId"; MySqlCommand cmd = new MySqlCommand(); cmd.Connection = conn; cmd.CommandText = sql; // Die Wert für den Parameter einfügen und einstellen. cmd.Parameters.Add("@salary", SqlDbType.Float).Value = 850; cmd.Parameters.Add("@empId", SqlDbType.Decimal).Value = 7369; // Die Durchführung vom Command (für delete, insert, update). int rowCount = cmd.ExecuteNonQuery(); Console.WriteLine("Row Count affected = " + rowCount); } catch (Exception e) { Console.WriteLine("Error: " + e); Console.WriteLine(e.StackTrace); } finally { conn.Close(); conn.Dispose(); conn = null; } Console.Read(); } } }
Das Beispiel durchführen

Das Beispiel: C# benutzen um die Daten im MySQL.zu löschen
DeleteExample.cs
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using MySql.Data.MySqlClient; using Tutorial.SqlConn; using System.Data; namespace CsMySQLTutorial { class DeleteExample { static void Main(string[] args) { // Eine Verbindung mit DB entnehmen. MySqlConnection conn = DBUtils.GetDBConnection(); conn.Open(); try { string sql = "Delete from Salary_Grade where Grade = @grade "; // Die Erstellung vom Command. MySqlCommand cmd = new MySqlCommand(); cmd.Connection = conn; cmd.CommandText = sql; cmd.Parameters.Add("@grade", SqlDbType.Int).Value = 3; // Die Durchführung vom Command (für delete,insert, update). int rowCount = cmd.ExecuteNonQuery(); Console.WriteLine("Row Count affected = " + rowCount); } catch (Exception e) { Console.WriteLine("Error: " + e); Console.WriteLine(e.StackTrace); } finally { conn.Close(); conn.Dispose(); conn = null; } Console.Read(); } } }
Sie sollen einen einfachen Verfahren im MySQL erstellen und ihn im C# aufrufen:
Get_Employee_Info
DELIMITER $$ -- This procedure retrieves information of an employee, -- Input parameter: p_Emp_ID (Integer) -- There are four output parameters v_Emp_No, v_First_Name, v_Last_Name, v_Hire_Date CREATE PROCEDURE get_Employee_Info(p_Emp_ID Integer, out v_Emp_No Varchar(50) , out v_First_Name Varchar(50) , Out v_Last_name Varchar(50) , Out v_Hire_date Date) BEGIN set v_Emp_No = concat( 'E' , Cast(p_Emp_Id as char(15)) ); -- set v_First_Name = 'Michael'; set v_Last_Name = 'Smith'; set v_Hire_date = curdate(); END
CallProcedureExample.cs
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Tutorial.SqlConn; using System.Data; using MySql.Data.MySqlClient; namespace CsMySQLTutorial { class CallProcedureExample { // Get_Employee_Info // @p_Emp_Id Integer , // @v_Emp_No Varchar(50) OUTPUT // @v_First_Name Varchar(50) OUTPUT // @v_Last_Name Varchar(50) OUTPUT // @v_Hire_Date Date OUTPUT static void Main(string[] args) { MySqlConnection conn = DBUtils.GetDBConnection(); conn.Open(); try { // Ein Objekt Command erstellen um den Verfahren Get_Employee_Info zu rufen. MySqlCommand cmd = new MySqlCommand("Get_Employee_Info", conn); // Command Typ als StoredProcedure einstellen. cmd.CommandType = CommandType.StoredProcedure; // Den Parameter @p_Emp_Id einfügen und die Wert = 100 für ihn einstellen. cmd.Parameters.Add("@p_Emp_Id", SqlDbType.Int).Value =100; // Den Parameter @v_Emp_No mit dem Typ vom Varchar(20). cmd.Parameters.Add(new MySqlParameter("@v_Emp_No", MySqlDbType.VarChar, 20)); cmd.Parameters.Add(new MySqlParameter("@v_First_Name", MySqlDbType.VarChar, 50)); cmd.Parameters.Add(new MySqlParameter("@v_Last_Name", MySqlDbType.VarChar, 50)); cmd.Parameters.Add(new MySqlParameter("@v_Hire_Date", MySqlDbType.Date)); // Die Registrierung des Parameter @v_Emp_No als OUTPUT. cmd.Parameters["@v_Emp_No"].Direction = ParameterDirection.Output; cmd.Parameters["@v_First_Name"].Direction = ParameterDirection.Output; cmd.Parameters["@v_Last_Name"].Direction = ParameterDirection.Output; cmd.Parameters["@v_Hire_Date"].Direction = ParameterDirection.Output; // Die Durchführung des Verfahren. cmd.ExecuteNonQuery(); // Die Outputswert entnehmen string empNo = cmd.Parameters["@v_Emp_No"].Value.ToString(); string firstName = cmd.Parameters["@v_First_Name"].Value.ToString(); string lastName = cmd.Parameters["@v_Last_Name"].Value.ToString(); DateTime hireDate = (DateTime)cmd.Parameters["@v_Hire_Date"].Value; Console.WriteLine("Emp No: " + empNo); Console.WriteLine("First Name: " + firstName); Console.WriteLine("Last Name: " + lastName); Console.WriteLine("Hire Date: " + hireDate); } catch (Exception e) { Console.WriteLine("Error: " + e); Console.WriteLine(e.StackTrace); } finally { conn.Close(); conn.Dispose(); } Console.Read(); } } }
Das Beispiel durchführen

Sie brauchen eine einfache Funktion und sie im C# aufrufen.
Get_Emp_No
DROP function if Exists `Get_Emp_No`; -- When programming the function / procedure you need to use semicolon -- to separate the different commands. -- Use DELIMITER $$ to allow use of semicolons. DELIMITER $$ CREATE Function Get_Emp_No (p_Emp_Id Integer) Returns Varchar(50) Begin return concat('E', CAST(p_Emp_Id as char)) ; END;
CallFunctionExample.cs
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Tutorial.SqlConn; using System.Data; using MySql.Data.MySqlClient; namespace CsMySQLTutorial { class CallFunctionExample { // Function: Get_Emp_No // Parameter: @p_Emp_Id Integer static void Main(string[] args) { MySqlConnection conn = DBUtils.GetDBConnection(); conn.Open(); try { // Ein Objekt Command erstellen um die Funktion Get_Emp_No aufzurufen. MySqlCommand cmd = new MySqlCommand("Get_Emp_No", conn); // Das Typ vom Command ist StoredProcedure cmd.CommandType = CommandType.StoredProcedure; // Den Parameter @p_Emp_Id einfügen und die Value = 100 einstellen. cmd.Parameters.AddWithValue("@p_Emp_Id", MySqlDbType.Int32).Value = 100; // Das Objekt MySqlParameter erstellen um // die zurückgegebene Wert bei der Aufruf zu speichern, MySqlParameter resultParam = new MySqlParameter("@Result", MySqlDbType.VarChar); resultParam.Direction = ParameterDirection.ReturnValue; cmd.Parameters.Add(resultParam); // Die Aufruf der Funktion cmd.ExecuteNonQuery(); string empNo = null; if (resultParam.Value != DBNull.Value) { empNo = (string)resultParam.Value; } Console.WriteLine("Emp No: " + empNo); } catch (Exception e) { Console.WriteLine("Error: " + e); Console.WriteLine(e.StackTrace); } finally { conn.Close(); conn.Dispose(); } Console.Read(); } } }
Das Beispiel durchführen

MySqlCommand.ExecuteScalar() ist eine Methode zur Implementierung des Befehl SQL und der Rückgabe der Wert von der ersten Spalte bei der ersten Zeile .
-- Der folgende Befehl gibt eine einzige Wert zurück. Select count(*) from Employee; -- Oder Select Max(e.Salary) From Employee e;
Zum Beispiel
ExecuteScalarExample.cs
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using MySql.Data.MySqlClient; using System.Data; using Tutorial.SqlConn; namespace CsMySQLTutorial { class ExecuteScalarExample { static void Main(string[] args) { MySqlConnection conn = DBUtils.GetDBConnection(); conn.Open(); try { MySqlCommand cmd = new MySqlCommand("Select count(*) From Employee", conn); cmd.CommandType = CommandType.Text; // Die Methode ExecuteScalar gibt die Wert der ersten Spalte in der ersten Zeile zurück object countObj = cmd.ExecuteScalar(); int count = 0; if (countObj != null) { count = Convert.ToInt32(countObj); } Console.WriteLine("Emp Count: " + count); } catch (Exception e) { Console.WriteLine("Error: " + e); Console.WriteLine(e.StackTrace); } finally { conn.Close(); conn.Dispose(); } Console.Read(); } } }
Das Beispiel durchführen

Sie können durch die Benutzung der Methode ExecuteScalar eine Funktion von MySQL aufrufen. Sehen Sie das folgende Beispiel:
- TODO