Ado.Net İle CRUD İşlemleri
Tags: genel
Published: 2020-12-26 13:38:42

---
title: Ado.Net İle CRUD İşlemleri
published: true
date: 2020-01-31 13:07:52 UTC
tags: Genel
canonical_url: 
---

Tanım vs. gibi detaylara girmeden doğrudan konuya gireceğim. Her ne kadar artık **ORM(Object Relational Mapping)** araçlarını kullansak da küçük çaplı projelerde **Entity Framework** vs gibi ORM araçları olmadan basit ve hızlı bir şekilde veritabanı işlerimizi halletmek isteriz. Çok uzun zaman kullanmayınca da söz dizimini(syntax) hatırlamakta zorlanabiliriz. Bu vesile ile elimizin altında bulunması için burada işin **DAL(Data Accees Layer)** kısmı paylaşmak istedim. Örnek projenin tamamına [buradan](https://github.com/hakanyalitekin/ADONET)erişilebilir.

Öncelikle **eTrade** diye bir veritabanı oluşturup [bu](https://github.com/hakanyalitekin/ADONET/blob/master/AdoNetDemo/eTrade.sql)kodları [**SSMS**](https://github.com/hakanyalitekin/ADONET/blob/master/AdoNetDemo/eTrade.sql)‘te çalıştırıyoruz. **Product** diye bir tablomuz ve içerisinde de örnek olarak üç adet verimiz oluşacak. Daha sonra oluşturulan örnek projede ProductDAL adında bir class oluşturuyoruz.

#### Bağlantı Oluşturma

``` csharp

 //_connetion'ın başına _ koyduk global olduğunu ya da dışarıda olduğunu belirtmek için.
    SqlConnection _connection = new SqlConnection("Server=.;Database=eTrade;Trusted_Connection=True;");

```

Bağlantımızın açık/kapalı durumunu her yerde yazmamak için metot olarak kontrol ediyoruz ve ihtiyacımız olduğunda bu metodu kullanıyoruz.

#### Bağlantı Durumunu Kontrol etme

``` csharp

 public void ConnetionControl()
        {
            if (_connection.State == ConnectionState.Closed) //Önce kontrol ediyoruz. Eğer açıksa tekrar açmak sıkıntı yaratabilir.
            {
                _connection.Open();
            }
        }

```

#### Listeleme İşlemi

``` csharp

   public List<Product> GetAll()
        {
            ConnetionControl();
            SqlCommand command = new SqlCommand("Select * from Products", _connection);
            SqlDataReader reader = command.ExecuteReader();//SQL'de F5'e basmak ile aynı. Dönderdiği değer ise SqlDataReader'tipinde.
            List<Product> products = new List<Product>();
            while (reader.Read())
            {
                Product product = new Product()
                {
                    Id = Convert.ToInt32(reader["Id"]),
                    Name = reader["Name"].ToString(),
                    StockAmount = Convert.ToInt32(reader["StockAmount"]),
                    UnitPrice = Convert.ToInt32(reader["UnitPrice"])
                };
                products.Add(product);
            }
            reader.Close();
            _connection.Close();
            return products;
        }

``` 

#### Ekleme İşlemi

``` csharp

    public void Add(Product product)
        {
            ConnetionControl();
            SqlCommand command = new SqlCommand("Insert into Products Values(@name,@unitPrice,@stockAmount)", _connection);
            command.Parameters.AddWithValue("@name", product.Name);
            command.Parameters.AddWithValue("@unitPrice", product.UnitPrice);
            command.Parameters.AddWithValue("@stockAmount", product.StockAmount);
            command.ExecuteNonQuery(); //Çalıştırır ve etkilenen kayıt sayısını döndürür.
            _connection.Close();
        }

```

#### Güncelleme İşlemi

```

  public void Update(Product product)
    {
        ConnetionControl();
        SqlCommand command = new SqlCommand("UPDATE Products SET Name=@name, UnitPrice=@unitPrice, StockAmount=@stockAmount WHERE Id=@Id", _connection);
        command.Parameters.AddWithValue("@name", product.Name);
        command.Parameters.AddWithValue("@unitPrice", product.UnitPrice);
        command.Parameters.AddWithValue("@stockAmount", product.StockAmount);
        command.Parameters.AddWithValue("@Id", product.Id);
        command.ExecuteNonQuery(); //Çalıştırır ve etkilenen kayıt sayısını döndürür.
        _connection.Close();
    }

```

#### Silme İşlemi

```

       public void Delete(int id)
        {
            ConnetionControl();
            SqlCommand command = new SqlCommand("Delete From Products WHERE Id = @Id", _connection);
            command.Parameters.AddWithValue("@Id", id);
            command.ExecuteNonQuery(); //Çalıştırır ve etkilenen kayıt sayısını döndürür.
            _connection.Close();
        }

```

#### Store Procedure ile Listeleme İşlemi

```

    public List<Product> GetAll_SP()
        {
            ConnetionControl();
            SqlCommand command = new SqlCommand("SP_ListProduct", _connection);
            command.CommandType = CommandType.StoredProcedure;

            SqlDataReader reader = command.ExecuteReader();//SQL'de F5'e basmak ile aynı. Dönderdiği değer ise SqlDataReader'tipinde.
            List<Product> products = new List<Product>();
            while (reader.Read())
            {
                Product product = new Product()
                {
                    Id = Convert.ToInt32(reader["Id"]),
                    Name = reader["Name"].ToString(),
                    StockAmount = Convert.ToInt32(reader["StockAmount"]),
                    UnitPrice = Convert.ToInt32(reader["UnitPrice"])
                };
                products.Add(product);
            }
            reader.Close();
            _connection.Close();
            return products;

        } //Listeleme için örnek

```

#### Store Procedure ile ekleme işlemi

```

    public void Add_SP(Product product) // Ekleme / Düzelme / Silme için örnek.
        {
            ConnetionControl();
            SqlCommand command = new SqlCommand("SP_AddProduct", _connection);
            command.CommandType = CommandType.StoredProcedure;
            command.Parameters.AddWithValue("@name", product.Name);
            command.Parameters.AddWithValue("@unitPrice", product.UnitPrice);
            command.Parameters.AddWithValue("@stockAmount", product.StockAmount);
            command.ExecuteNonQuery(); //Çalıştırır ve etkilenen kayıt sayısını döndürür.
            _connection.Close();
        }

```