DEV Community

Hakan Yalitekin
Hakan Yalitekin

Posted on • Originally published at hakanyalitekin.wordpress.com on

Ado.Net İle CRUD İşlemleri

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 buradanerişilebilir.

Öncelikle eTrade diye bir veritabanı oluşturup bukodları SSMS‘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


 //_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;");

Enter fullscreen mode Exit fullscreen mode

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


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

Enter fullscreen mode Exit fullscreen mode

Listeleme İşlemi


   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;
        }

Enter fullscreen mode Exit fullscreen mode

Ekleme İşlemi


    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();
        }

Enter fullscreen mode Exit fullscreen mode

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();
    }

Enter fullscreen mode Exit fullscreen mode

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();
        }

Enter fullscreen mode Exit fullscreen mode

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

Enter fullscreen mode Exit fullscreen mode

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();
        }

Enter fullscreen mode Exit fullscreen mode

Discussion (0)