Arbeiten Sie mit der MySQL-Datenbank in C#
1. Die Vorstellung
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:
2. Die Verbindung von C# in die MySql Database
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);
}
}
}
3. MySqlCommand
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);
4. Die Daten abfragen
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
--------------------
empIdIndex:0
EmpId:7369
EmpNo:E7369
EmpName:SMITH
MngId:7902
--------------------
empIdIndex:0
EmpId:7499
EmpNo:E7499
EmpName:ALLEN
MngId:7698
--------------------
empIdIndex:0
EmpId:7521
EmpNo:E7521
EmpName:WARD
MngId:7698
--------------------
empIdIndex:0
EmpId:7566
EmpNo:E7566
EmpName:JONES
MngId:7839
.....
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(); }
5. Insert der Daten
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
Row Count affected = 1
6. Update der Daten
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
Row Count affected = 1
7. Die Daten löschen
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();
}
}
}
8. Den Verfahren im C# aufrufen
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
Emp No: E100
First Name: Michael
Last Name: Smith
Hire Date: 2/11/2016 12:00:00 AM
9. Die Aufruf der Funktion im C#
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
Emp No: E100
10. ExecuteScalar
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
Emp Count: 14
Sie können durch die Benutzung der Methode ExecuteScalar eine Funktion von MySQL aufrufen. Sehen Sie das folgende Beispiel:
Anleitungen C#
- Vererbung und Polymorphismus in C#
- Was ist erforderlich, um mit C# zu beginnen?
- Schnelles Lernen C# für Anfänger
- Installieren Sie Visual Studio 2013 unter Windows
- Abstrakte Klasse und Schnittstelle in C#
- Installieren Sie Visual Studio 2015 unter Windows
- Kompression und Dekompression in C#
- Die Anleitung zu C# Multithreading Programmierung
- Die Anleitung zu C# Delegate und Event
- Installieren Sie AnkhSVN unter Windows
- C# Programmierung für Team mit Visual Studio und SVN
- Installieren Sie .Net Framework
- Zugriffsmodifikator (Access Modifier) in C#
- Die Anleitung zu C# String und StringBuilder
- Die Anleitung zu C# Property
- Die Anleitung zu C# Enum
- Die Anleitung zu C# Structure
- Die Anleitung zu C# Generics
- Ausnahmen und Ausnahmebehandlung in C#
- Die Anleitung zu C# Date Time
- Manipulieren von Dateien und Verzeichnissen in C#
- Die Anleitung zu C# Stream - binäre Ströme in C#
- Die Anleitung zu C# Reguläre Ausdrücke
- Stellen Sie in C# eine Verbindung zur SQL Server-Datenbank her
- Arbeiten Sie mit der SQL Server-Datenbank in C#
- Stellen Sie in C# eine Verbindung zur MySQL-Datenbank her
- Arbeiten Sie mit der MySQL-Datenbank in C#
- Stellen Sie ohne Oracle Client eine Verbindung zur Oracle-Datenbank in C# her
- Arbeiten Sie mit der Oracle-Datenbank in C#
Show More