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:
- https://msdn.microsoft.com/en-us/library/jj653752(v=vs.110).aspx
- http://www.bilisimogretmeni.com/asp-net/asp-net-dersleri-e28093-asp-net-ile-access-veritabani-islemleri-3-veri-listeleme-veri-cekme.html
- http://www.mehmetkirazli.com/asp-net-veritabani-baglantisi/
- http://www.sqlstrings.com/SQL-Server-connection-strings.htm
- https://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.parameters(v=vs.110).aspx
- https://msdn.microsoft.com/en-us/library/dx0f3cf2(v=vs.85).aspx
- https://msdn.microsoft.com/en-us/library/ff649224.aspx
- http://www.aspsnippets.com/Articles/Encrypt-and-Decrypt-Connection-Strings-in-WebConfig-file-in-ASPNet.aspx
Hiç yorum yok :
Yorum Gönder