NotesWhat is notes.io?

Notes brand slogan

Notes - notes.io

using System;
using System.Collections.Generic;
using MySql.Data.MySqlClient;

namespace Jdforsythe.MySQLConnection {

/// <summary>
/// MySQLConnection, Visual Studio uygulamalarınızda MySQL'in kullanımını daha kolay hale getirerek kolaylaştırır.
/// MySQL .NET Connector Uzak veya yerel .NET veri türleri ile çalışabilirsiniz.
/// </summary>
/// <remarks>
/// Bu sınıf, IDisposable arabirimini uygular ve bu nedenle MySQL bağlantılarının uygun şekilde temizlenmesini sağlamak ve kalıcı, sarkan kalıcı bağlantıları engellemek için Using () deseniyle kullanılmalıdır.
/// </remarks>
/// <example>
/// <code>
/// string myValue;
///
/// using (MySqlConn sql = new MySqlConn(connectionString)) {
/// sql.Query = "SELECT my_column FROM table LIMIT 1";
/// myValue = sql.selectQueryForSingleValue();
/// } // burada bağlantı kapatılır ve kaynaklar Garbage Collector(Çöp Toplayıcı) tarafından uygun şekilde bertaraf edilir
///
/// Console.WriteLine(myValue);
/// </code>
/// </example>
public class MySQLConn : IDisposable {

private bool _isDisposed = false;
private MySqlConnection _connection = null;
private Dictionary<string, object> _parameters = new Dictionary<string, object>();

/// <summary>MySQL veritabanını sorgulamak için sorgu dizesi</summary>
/// <remarks>Sorgularınızı güvenle parametreleştirmek için @ParamName sözdizimini, addParam() methoduyla birlikte kullanın</remarks>
public string Query { get; set; }

/// <summary>
/// Temel class(sınıf) constructor(yapıcı), MySQL .NET Connector için olduğu gibi tam bir bağlantı dizesi kullanır
/// <see cref="https://dev.mysql.com/doc/connector-net/en/connector-net-programming-connecting-open.html"/>
/// </summary>
/// <param name="connectionString">Bağlantı dizesi</param>
public MySQLConn(string connectionString) {
if (this._isDisposed)
throw new ObjectDisposedException("Cannot open connection - class has been disposed.");

if (string.IsNullOrEmpty(connectionString))
throw new Exception("Invalid connection parameters for database.");

try {
this._connection = new MySqlConnection(connectionString);
this._connection.Open();
}
catch {
throw;
}

}

/// <summary>
/// Bu Class constructor, bağlantı parametrelerini ayrı stringler olarak geçirmek için
/// </summary>
/// <param name="server">MySQL sunucusunun adresi</param>
/// /// <param name="database">Bağlanılacak veritabanının adı</param>
/// <param name="username">MySQL veritabanına bağlanılacak kullanıcı adı</param>
/// <param name="password">MySQL veritabanına bağlanmak için gereken şifre</param>
/// <param name="options">MySQL Veritabanına bağlanırken kullanılacak options stringi <see cref="https://dev.mysql.com/doc/connector-net/en/connector-net-programming-connecting-open.html"/></param>
public MySQLConn(string server, string database, string username, string password, string options = "")
: this(ConstructConnectionStringFromParameters(server, database, username, password, options)) {}

/// <summary>Parametreli sorguları kullanırken, bu yöntem parametrelerin adını ve değerini eklemenizi sağlar. Ad, sorguda kullanılan @ParamName ile eşleşmelidir</summary>
/// <param name="key">Eklenecek parametrenin adı @ParamName</param>
/// <param name="value">Parametrenin değeri</param>
public void addParam(string key, object value) {
this._parameters.Add(key, value);
}

/// <summary>Parametreli sorguları kullanırken, bu yöntem önceden ayarlanmış bir parametreyi kaldırmanıza izin verir</summary>
/// <param name="key">Kaldırılacak parametrenin adı @ParamName</param>
public void removeParam(string key) {
this._parameters.Remove(key);
}

/// <summary>Parametreli sorguları kullanırken, bu yöntem mevcut bir parametre değerini güncellemenizi veya önceden mevcut değilse eklemenizi sağlar</summary>
/// <remarks> using() ifadesiyle bağlantıyı yeniden kullanmak, bir veya iki şeyi değiştirmeniz gerektiğinde .clear Params () kullanmaktan daha kullanışlıdır</remarks>
/// <param name="key">güncelleştirilecel/eklenecek parametrenin adı @ParamName</param>
/// <param name="value">Parametrenin değeri</param>
public void updateParam(string key, object value) {
if (this._parameters.ContainsKey(key)) {
this._parameters[key] = value;
}
else {
this._parameters.Add(key, value);
}
}

/// <summary>Parametreli sorguları kullanırken, bu yöntem o anda ayarlanmış olan tüm parametreleri ve değerleri temizlemenizi sağlar</summary>
public void clearParams() {
this._parameters.Clear();
}

/// <summary>Bu yöntem, geriye tek bir değer bekleyen bir sorgu çalıştırmanıza izin verir (yani bir kayıttan bir sütun)</summary>
/// <returns>Sorgunun string değeri sonucu-veya- sonuç yoksa <c>null</c></returns>
public string selectQueryForSingleValue() {
CheckIfInstanceIsReadyForQuery();

string single_value = null;

using (MySqlCommand command = new MySqlCommand(this.Query, this._connection)) {
AddParametersToCommand(command);

object dbValue = null;

try {
dbValue = command.ExecuteScalar();
}
catch {
throw;
}

if (dbValue == DBNull.Value) {
single_value = null;
}
else {
single_value = Convert.ToString(dbValue);
}
}

return single_value;
}

/// <summary>Bu yöntem, herhangi bir sayıda sütun bekleyen bir sorgu çalıştırmanıza izin verir, fakat tek bir kayıt(cevap) (ör. <c> SELECT * FROM table_adı LIMIT 1 </c>)</summary>
/// <returns>sorgudan kaynaklanan kaydın gösterimi <c> Sözlük & lt; string, string & gt; </c> veya sonuç yoksa <c> null </c></returns>
public Dictionary<string, string> selectQueryForSingleRecord() {
CheckIfInstanceIsReadyForQuery();

// Sonuç yoksa, boş değerden ziyade null döndürürüz
Dictionary<string, string> record = null;

using (MySqlCommand command = new MySqlCommand(this.Query, this._connection)) {
AddParametersToCommand(command);

try {
using (MySqlDataReader reader = command.ExecuteReader()) {
if (reader.HasRows) {
record = new Dictionary<string, string>();

// sadece ilk satırı oku
reader.Read();

// ilk kaydın anahtarlarını / değerlerini alın ve sözlüğe ekleyin.
for (int i = 0; i < reader.FieldCount; i++) {

// null yakala ve boş string olarak ayarlama
if (reader[i] == DBNull.Value) {
record.Add(reader.GetName(i), null);
}
else {
record.Add(reader.GetName(i), reader[i].ToString());
}
}

}
}

}
catch {
throw;
}

}

return record;
}

/// <summary>Bu method, herhangi bir sayıda kayıt bekleyen bir sorgu çalıştırmanıza izin verir, ancak tek bir sütun (ör. <c>SELECT sütun_adı FROM tablo_adı</c>)</summary>
/// <returns>A <c>List&lt;string&gt;</c> sorgudan döndürülen değerleri listeleme, yada boşsa <c>List&lt;string&gt;</c> eğer sonuç yoksa </returns>
public List<string> selectQueryForSingleColumn() {
CheckIfInstanceIsReadyForQuery();

// Sonuç kümesi boşsa, boş bir liste döndürürüz
List<string> allRecords = new List<string>();

using (MySqlCommand command = new MySqlCommand(this.Query, this._connection)) {
AddParametersToCommand(command);

try {
using (MySqlDataReader reader = command.ExecuteReader()) {

if (reader.HasRows) {
// Sadece reader(0) çünkü sadece bir veri sütunu istiyoruz
while (reader.Read()) {
if (reader[0] == DBNull.Value) {
allRecords.Add(null);
}
else {
allRecords.Add(reader[0].ToString());
}
}

}
}
}
catch {
throw;
}
}

return allRecords;
}

/// <summary>Bu yöntem, herhangi bir sayıda sütun ve herhangi bir sayıda kayıt bekleyen bir sorguyu çalıştırmanıza izin verir. (ör. <c>SELECT * FROM tablo_adı</c>)</summary>
/// <returns>A <c>List&lt;Dictionary&lt;string, string&gt;&gt;</c> sorgudan elde edilen kayıtların gösterimi, yada boşsa <c>List&lt;Dictionary&lt;string, string&gt;&gt;</c> eğer sonuç yoksa</returns>
public List<Dictionary<string, string>> selectQuery() {
CheckIfInstanceIsReadyForQuery();

List<Dictionary<string, string>> allRecords = new List<Dictionary<string, string>>();

using (MySqlCommand command = new MySqlCommand(this.Query, this._connection)) {
AddParametersToCommand(command);

try {
using (MySqlDataReader reader = command.ExecuteReader()) {

Dictionary<string, string> record;

if (reader.HasRows) {

while (reader.Read()) {
//Her sütun ve değeri ekleyerek kayıt için yeni bir sözlük oluştur
record = new Dictionary<string, string>();

for (int i = 0; i <= (reader.FieldCount - 1); i++) {
// null değer yakala, boş string değer döndürme
if (reader[i] == DBNull.Value) {
record.Add(reader.GetName(i), null);
}
else {
record.Add(reader.GetName(i), reader[i].ToString());
}
}

// sözlüğü Listeye ekle
allRecords.Add(record);
}
}
}
}
catch {
throw;
}
}

return allRecords;
}

/// <summary>Bu yöntem bir <c> INSERT </c> sorgusu çalıştırmanıza izin verir</summary>
/// <returns>Sorgudan etkilenen kayıt sayısını gösteren bir tam sayı değeri</returns>
public int insertQuery() {
CheckIfInstanceIsReadyForQuery();

int affectedRecords = 0;

using (MySqlCommand command = new MySqlCommand(this.Query, this._connection)) {
AddParametersToCommand(command);

try {
affectedRecords = command.ExecuteNonQuery();
}
catch {
throw;
}
}

return affectedRecords;
}

/// <summary>Bu method, sorgudan etkilenen kayıtların bir <c> UPDATE </c> sorgusu çalıştırmasına izin verir.</summary>
/// <returns>Sorgudan etkilenen kayıt sayısını gösteren bir tam sayı değeri</returns>
public int updateQuery() {
return insertQuery();
}

/// <summary>Bu method bir <c> DELETE </c> sorgusu çalıştırmanıza izin verir</summary>
/// <returns>Sorgudan etkilenen kayıt sayısını gösteren bir tam sayı değeri</returns>
public int deleteQuery() {
return insertQuery();
}


/// <summary>Bu method, sınırlı bir metin dosyasından kayıtları içe aktarmak için MySQL <c> LOAD DATA INFILE </c> özelliğini kullanmanızı sağlar</summary>
/// <param name="tableName">Kayıtların alınacağı tablo</param>
/// <param name="fieldTerminator">Her alan için sonlandırıcı (örneğin, CSV için ",")</param>
/// <param name="lineTerminator">Her satır için sonlandırıcı</param>
/// <param name="filename">Alınacak dosyanın yolu</param>
/// <param name="linesToSkip">Atlanacak satır sayısı (ör. Başlık satırını atla)</param>
/// <returns>İçe aktarmadan etkilenen kayıt sayısını gösteren bir tam sayı değeri</returns>
public int loadDataInfile(string tableName, string fieldTerminator, string lineTerminator, string filename, int linesToSkip) {
MySqlBulkLoader bl = new MySqlBulkLoader(this._connection);

bl.TableName = tableName;
bl.FieldTerminator = fieldTerminator;
bl.LineTerminator = lineTerminator;
bl.FileName = filename;
bl.NumberOfLinesToSkip = linesToSkip;

try {
return bl.Load();
}
catch {
throw;
}
}


/*
* Private methodlar
*/

private static string ConstructConnectionStringFromParameters(string server, string database, string username, string password, string options = "") {
if (string.IsNullOrEmpty(server) || string.IsNullOrEmpty(username) || string.IsNullOrEmpty(password) || string.IsNullOrEmpty(database))
throw new Exception("Invalid connection parameters for database.");
return "Data Source=" + server + "; user id=" + username + "; password=" + password + "; database=" + database + "; " + options;
}

private void CheckIfInstanceIsReadyForQuery() {
if (this._isDisposed)
throw new ObjectDisposedException("Cannot execute query. Class has been disposed.");

if (this._connection == null)
throw new Exception("No connection opened.");

if (string.IsNullOrEmpty(this.Query))
throw new Exception("Cannot execute empty query.");
}

private void AddParametersToCommand(MySqlCommand command) {
if (this._parameters.Count > 0) {
foreach (KeyValuePair<string, object> kvp in this._parameters) {
command.Parameters.AddWithValue(kvp.Key, kvp.Value);
}
}
}

/*
* Kimlik Amaçlı Uygulama
*/

/// <summary>
/// Bu class, MySQL bağlantılarını düzgün bir şekilde elden çıkarmak için IDisposable özelliğini kullanır. Bu nedenle, bu sınıf yalnızca using() deseniyle kullanılmalıdır
/// Kaynakların uygun şekilde elden çıkarıldığından emin olmak, hafıza sızıntılarını ve kalıcı bağlantıları kesmek için
/// </summary>
/// <param name="disposing">Dispose() kodundan çağrıldı</param>
protected virtual void Dispose(bool disposing) {
// if already disposed, don't do anything
if (this._isDisposed)
return;

if ((disposing)) {
this._connection.Close();
this._connection = null;
this._isDisposed = true;
}

}

/// <summary>Tek kullanımlık arayüzün uygulanması</summary>
public void Dispose() {
Dispose(true);
GC.SuppressFinalize(this);
}

}
}
     
 
what is notes.io
 

Notes.io is a web-based application for taking notes. You can take your notes and share with others people. If you like taking long notes, notes.io is designed for you. To date, over 8,000,000,000 notes created and continuing...

With notes.io;

  • * You can take a note from anywhere and any device with internet connection.
  • * You can share the notes in social platforms (YouTube, Facebook, Twitter, instagram etc.).
  • * You can quickly share your contents without website, blog and e-mail.
  • * You don't need to create any Account to share a note. As you wish you can use quick, easy and best shortened notes with sms, websites, e-mail, or messaging services (WhatsApp, iMessage, Telegram, Signal).
  • * Notes.io has fabulous infrastructure design for a short link and allows you to share the note as an easy and understandable link.

Fast: Notes.io is built for speed and performance. You can take a notes quickly and browse your archive.

Easy: Notes.io doesn’t require installation. Just write and share note!

Short: Notes.io’s url just 8 character. You’ll get shorten link of your note when you want to share. (Ex: notes.io/q )

Free: Notes.io works for 12 years and has been free since the day it was started.


You immediately create your first note and start sharing with the ones you wish. If you want to contact us, you can use the following communication channels;


Email: [email protected]

Twitter: http://twitter.com/notesio

Instagram: http://instagram.com/notes.io

Facebook: http://facebook.com/notesio



Regards;
Notes.io Team

     
 
Shortened Note Link
 
 
Looding Image
 
     
 
Long File
 
 

For written notes was greater than 18KB Unable to shorten.

To be smaller than 18KB, please organize your notes, or sign in.