5 Aralık 2016 Pazartesi

ASP.NET Veritabanı Bağlantı İşlemleri

ASP.NET’de veri tabanı bağlantısı işlemini aşağıda, MS Access 2007 ve MS SQL veritabanlarına bağlanma örnekleri ile açıklamaya çalışacağım.
Veritabanı bağlantı işlemini yaparken; önce veritabanına Connection kütüphanesi kullanılarak connect olunur. Sonra Command kütüphanesi aracılığı ile sorgulama ifadesi ve parametreleri hazırlanır. Sonra Command kütüphanesinin “ExecuteReader” methodu yardımı ile veritabanındaki veri Reader kütüphanesinin yeni oluşturulmuş object instance’ına setlenir. Reader objesine alınan veri, client tarafındaki ilgili objelere(table, gridview, …vs) setlenir. Son olarak da açılmış olan connection kapatılır.
İlk yöntemde; MS Access 2007 veri tabanı bağlantısı için “connection string”i code behind da yazarak veritabanından verileri çekip, code front taki Literal objemizin içerisine koyacağımız bir table’a parse ediyoruz(Başka veri tabanlarına bağlanmak istersek, connection string ifadesi değişecektir!);
OleDbConnection con = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0; DATA Source=" + Server.MapPath("aspnet.accdb"));
try
   {
con.Open();
OleDbCommand cmd = new OleDbCommand("select * from Person", con);
            OleDbDataReader reader = cmd.ExecuteReader();
            if (reader.HasRows)
            {
                    Literal1.Text += "<table border=1><tr>";
                    Literal1.Text += "<td>Sıra No</td>";
                    Literal1.Text += "<td>Adı</td>";
                    Literal1.Text += "<td>Soyadı</td>";
                    Literal1.Text += "<td>Ünvanı</td>";
                    Literal1.Text += "</tr>";
                    int i = 1;
                    while (reader.Read())
                    {
                        Literal1.Text += "<tr>";
                        Literal1.Text += "<td>"+i.ToString()+"</td>";
                        Literal1.Text += "<td>" + reader["Adi"].ToString() + "</td>";
                        Literal1.Text += "<td>" + reader["Soyadi"].ToString() + "</td>";
                        Literal1.Text += "<td>" + reader["Unvani"].ToString() + "</td>";
                        Literal1.Text += "</tr>";
                        i++;
                    }
                    Literal1.Text += "</table>";
                    con.Close();
            }
   }
   catch
    {
        Response.Write("Veri tabanı bağlantısı kurulamadı!");
    }

Bir diğer yöntem olarak da; MS SQL veri tabanına connection işlemini “web.config”i kullanarak yapalım; “connection string” ifademizi code behind’da “web.config” ten okuyup , veri tabanına bağlantı kurup,veri tabanından çektiğimiz veriyi GridView’a aşağıdaki gibi setleyelim;
Önce “web.config” içerisindeki “configration” attribute’unun içine aşağıdaki gibi MSSQL “connection string” ifademizi tanımlıyoruz;
<configuration>
 <connectionStrings>
 <add name=" ConnectionStringName " connectionString="Data Source=.(farklı bir makine ise buraya ip girebilirsiniz); Initial Catalog=Person; User ID=(kullanıcı ismi olacak); Password=(şifre olacak);" providerName="System.Data.SqlClient"/>
 </connectionStrings>
</configuration>
            Tüm SQL serverlar için Microsoft’un yayınlamış olduğu connection string ifadesi(Integrated Security=False için) aşağıdaki gibidir;
<add name="ConnectionStringName" providerName="System.Data.SqlClient" connectionString="Data Source=ServerName;Initial Catalog=DatabaseName;Integrated Security=False;User Id=userid;Password=password;MultipleActiveResultSets=True" />
            Connection string ifadelerini daha detaylı olarak “https://support.microsoft.com/en-us/kb/300382” ve “https://msdn.microsoft.com/en-us/library/jj653752(v=vs.110).aspx” linklerinden inceleyebilirsiniz.
Daha sonra code behind’da aşağıdaki gibi connection string değerini çekip veritabanı bağlantısını kurarak dataları getirip GridView’e setliyoruz;
try
   {
            Int personelId = 111;
            decimal maas= 7000;
            string unvan = “Muhendis”;
SqlConnection con = new SqlConnection(System.Web.Configuration.WebConfigurationManager.ConnectionStrings["ConnectionStringName "].ConnectionString);
con.Open();
SqlCommand cmd = new SqlCommand();
cmd.CommandText = "select * from Person where PersonelId =@Id and Maas=@Ucret and Unvani=@Unvan";
cmd.Connection = con;
//Sorgu parametrelerini üç farklı yöntemle setleyelim;
//1.yontem
command.Parameters.Add("@Id", SqlDbType.Int);
command.Parameters["@Id"].Value = personelId;
//2.yontem
command.Parameters.AddWithValue("@Ucret", maas);
//3.yontem
SqlParameter param  = new SqlParameter();
param.ParameterName = "@Unvan";
param.Value = unvan;
cmd.Parameters.Add(param);

SqlDataReader reader = cmd.ExecuteReader();
GridView1.DataSource = reader;
GridView1.DataBind();
con.Close();
   }
   catch
    {
        Response.Write("Veri tabanı bağlantısı kurulamadı!");
    }

Veritabanı bağlantısında Güvenlik;
Veritabanına bağlanıp verileri çekerken verilerin güvenliğine de mutlaka dikkat etmemiz gerekmektedir. Eğer güvenlik tedbirlerini almadan doğrudan veritabanına bağlanmaya izin verirsek yazmış olduğumuz uygulamanın çökmesine varıncaya kadar ağır sonuçlarla karşılaşmamız olasıdır.
Bu kapsamda; veri tabanı sorgularında kullandığımız parametreler ile ilgili Microsoft’un veri tabanı sızmalarını önlemek için önermiş olduğu “AntiXSS” Library’sini kullanmak yararlı olacaktır. Kullanırken ise client tarafından gönderilmiş olan sorgu parametreleri, “AntiXSS” kütüphanesi yardımı ile güvenlik kontrolünden geçirildikten sonra sorgulara parametre olarak verilmelidir. Genel güvenlik mantığı olarak çok katmanlı mimaride mümkün olduğunca; gönderilen her sorgu parametresi client tarafında encrypt edilmeli ve orta katmanda sorgulama işlemlerinde parametre olarak kullanılırken ise decrypt edilmelidir.
Ayrıca, “web.config” içerisine yazılan connection string içerisinde kullanıcı adı ve şifre bilgilerini tutmak da güvenli olmadığı için; connection string ifadesinin ya “web.config” içerisinde kriptolanarak tutulması yada register’da kriptolanmış olarak tutulması daha güvenlidir.
“web.config” içerisindeki connection string ifadesinin encrypt ve decrypt işlemleri için “%systemroot%\Microsoft.NET\Framework\versionNumber” dizininin içindeki Microsoft.NET framework tarafından bize sunulan “aspnet_regiis.exe” tool’unu kullanabiliriz. Detaylı kullanım örneklerini “https://msdn.microsoft.com/en-us/library/dx0f3cf2(v=vs.85).aspx” ve “http://www.aspsnippets.com/Articles/Encrypt-and-Decrypt-Connection-Strings-in-WebConfig-file-in-ASPNet.aspx” linklerinden inceleyebilirsiniz.
Windows registry içerisinde connection string ifadesinin kriptolanarak tutulması örneğini ise daha detaylı olarak; “https://msdn.microsoft.com/en-us/library/ff649224.aspx linkinden inceleyebilirsiniz.

Kaynaklar:




Hiç yorum yok :

Yorum Gönder