20 Kasım 2019 Çarşamba

SQL Server'da yeni kullanıcı oluşturma ve Tablo bazlı Yetki Verme

To create a login, Navigate to Security > Logins




In the next screen, Enter

1- Login Name
2- Select SQL Server authentication
3- Enter Password
4- Click Ok



Login is created



You can also create a login using the T-SQL command.
CREATE LOGIN MyLogin WITH PASSWORD = '123';
How to create a User
A user is an account that you can use to access the SQL server. To create users, you can use any of the following two ways:
  • Using T-SQL
  • Using SQL Server Management Studio
Create User using SQL Server Management Studio
You will be creating a user for the EDU_TSQL database.
1.        Connect to SQL Server then expand the Databases folder from the Object Explorer.
2.        Identify the database for which you need to create the user and expand it.
3.        Expand its Security folder.
4.        Right-click the Users folder then choose "New User…"




You will get the following screen,
1.        Enter desired User name
2.        Enter the Login name (created earlier)
3.        Click OK



User is created


Create User using T-SQL
You can create a new USER using the T-SQL's create user command. The command takes the following syntax:
create user <user-name> for login <login-name>
create user Guru99 for login MyLogin
Note: That the query should be executed within the query window. If a user is already created for a Login, SQL Server will throw an error if you create a user for the same login.
Assigning Permission to a User
Permissions refer to the rules that govern the levels of access that users have on the secured SQL Server resources. SQL Server allows you to grant, revoke and deny such permissions. There are two ways to assign permissions in SQL Server:
  • Using T-SQL
  • Using SQL Server Management Studio
Assign Permission Using SQL Server Management Studio
Step 1) Connect to your SQL Server instance and expand the folders from the Object Explorer as shown below. Right click on the name of the user, that is, Guru99 then choose Properties.



Step 2) In the next screen,
1.        Click the Securables option from the left.
2.        Click on Search



Step 3) In the next window,
1.        Select "All Objects belonging to the Schema."
2.        Select Schema name as "dbo"
3.        Click OK



Step 4)
1.        Identify Table you want to Grant Permission
2.        In Explicit Permission select Grant
3.        Click Okay



Step 5) The user Guru99 is granted SELECT permission on table Course.
Grant Permission using T-SQL
To grant permission to a user using T-SQL, you first select the database using the use statement. You then assign the permission to the user using the grant statement. Here is the syntax:
use <database-name>
grant <permission-name> on <object-name> to <username\principle>
For example, the following command shows how you can grant the select permission to the user Guru99 on the object (table) named Course within the Database EDU_TSQL:
USE EDU_TSQL
GO
Grant select on Course to Guru99
The permission will be granted!

1 Ekim 2019 Salı

Microsoft.Jet.OLEDB.4.0' provider is not registered on the local machine hatası çözümü

Projenizi local'den çalıştırdığınızda bir sorunla karşılaşmamanıza rağmen IIS'de çalıştırdığınızda Microsoft.Jet.OLEDB.4.0' provider is not registered on the local machine hatası alıyorsanız aşağıdaki ayarı yaptığınızda düzelmektedir.

1- IIS'i aç
2-Application Pools içinde Advanced Settings seçeneğine tıkla
3-Enable 32-Bit Applications "True" yap

24 Eylül 2019 Salı

GridView'dan Okuma Yaparken Karşılaşılan Türkçe Karakter Sorunu Çözümü


Context.Server.HtmlDecode(row.Cells[1].Text)

Kullanımı;

foreach (GridViewRow row in grdExcel.Rows)
                {
                    SqlCommand sorgu = new SqlCommand("insert into VatmanBilgisi (vatmanNumarasi,vatmanAdiSoyadi) values ('" + row.Cells[0].Text + "','" + Context.Server.HtmlDecode(row.Cells[1].Text) + "')", baglanti);

                    sorgu.ExecuteNonQuery();

                }

17 Eylül 2019 Salı

Veri tabanı İşlemleri için Hazırlanmış Sınıf

public class sqlBaglantisi
    {
        public SqlConnection baglan()
        {
            SqlConnection baglanti = new SqlConnection(@"Data Source=Server_name;Initial Catalog=database_name;User ID=user_id;Password=password;");
         
            baglanti.Open();
            return (baglanti);
        }

        public int cmd(string sqlcumle)
        {
            SqlConnection baglan = this.baglan();
            SqlCommand sorgu = new SqlCommand(sqlcumle, baglan);
            int sonuc = 0;
            try
            {
                sonuc = sorgu.ExecuteNonQuery();
            }
            catch (SqlException ex)
            {
                throw new Exception(ex.Message + " (" + sqlcumle + ")");
            }
            sorgu.Dispose();
            baglan.Close();
            baglan.Dispose();
            return (sonuc);
        }
     
        public DataTable GetDataTable(string sql)
        {
            SqlConnection baglanti = this.baglan();
            SqlDataAdapter adapter = new SqlDataAdapter(sql, baglanti);
            DataTable dt = new DataTable();
            try
            {
                adapter.Fill(dt);
            }
            catch (SqlException ex)
            {
                throw new Exception(ex.Message + " (" + sql + ")");
            }
            adapter.Dispose();
            baglanti.Close();
            baglanti.Dispose();
            return dt;
        }

        public DataRow GetDataRow(string sql)
        {
            DataTable table = GetDataTable(sql);
            if (table.Rows.Count == 0) return null;
            return table.Rows[0];
        }

        public string GetDataCell(string sql)
        {
            DataTable table = GetDataTable(sql);
            if (table.Rows.Count == 0) return null;
            return table.Rows[0][0].ToString();
        }
    }

ASP.NET Uygulamalarında Sql İnjection Saldırılarına Karşı Alınması Gereken Önlemler

ASP.NET web form ile geliştirdiğimiz web sitemizi nasıl daha güvenli hale getirebiliriz. Dikkat ederseniz daha güvenli hale getirmek dedim çünkü hiçbir zaman tam güvenlik yoktur. Fakat bu makalede anlatılanları yaparsanız en azından script kiddieleri sitenizden uzak tutabileceğinizi belirtmek istiyorum.

Sql Injection


 Sql saldırısı, kullanıcıdan bir girdi alıp bu verileri herhangi bir filtrelemeden geçirmeden sql kodlarınızda kullanmanızdan kaynaklanır.

string Gelen;
Gelen = TextBox1.Text.Replace(“/”,””);
Gelen = Gelen.Replace(“’”,””);
Gelen = Gelen.Replace(“=”,””);

SqlCommand sorgu = new SqlCommand(“Select * from tablo where Ad=@ad”);
sorgu.Parameters.Add(“@ad”,Gelen);


Kodlarınızı bazı karakter filtrelemelerinden geçirerek ve direk SQL koduna değilde parametre şeklinde göndererek bu zafiyetten korunabilirsiniz. İsterseniz Stored Procedure kullanarakda bu açıklıktan kurtulabilirsiniz.

XSS Zafiyeti


Bu zafiyet sitenize javascript kodlarının gömülmesidir. Bildiğiniz üzere Javascript kodları ilede bir çok şey yapılabiliyor. Bu önemli zafiyetten kurtulmak için temel prensibimiz olan “Kullanıcıdan gelen veriye güvenme!” mantığını uyguluyoruz ve kullanıcıdan veri aldığımız kısımlarda(İletişim bölümü,yorum bölümü) gelen değerleri filtrelerden geçiriyoruz. Web.config dosyamıza şunları ekliyoruz.

< system.web>
< pages buffer=”true” validateRequest=”true” />
< /system.web>
Bu web.config ayarı sizi tehlikeli HTML karakterlerinden koruyacaktır. Bu kodda girilen verileri kontrol ettik fakat her zaman output karakterleride kontrol edilmelidir. Onun için ise aşağıdaki kodu yazıyoruz.

<%#HttpUtility.HtmlEncode(Eval(“Yorum”))%>

Böylelikle artık veritabanından geri gelen verileriniz web sayfanızda yayınlanırken güvenli olacaklardır.

Parola Güvenliği


Parola güvenliğinin amacı veritabanınız o ya da bu şekilde çalındığı zaman kullanıcıların parola değerlerini kötü niyetli kişiye göstermemektir. Çünkü kullanıcılar sitenizde kullandığı parolalarını başka sitelerdede kullanıyor olabilir ya da web sitenize login olarak o kişinin profilini mahvedebilir. Biz kötü niyetli kişinin veritabanını ele geçirse bile kullanıcıların parolalarını bilememesini istiyoruz.



Öncelikle hemen belirtmeliyim. Yeterli zaman ve performans gücü varsa bu parolalar o ya da bu şekilde elegeçirilecektir. Biz bu işlemin süresini yıllar seviyesine çıkararak kötü niyetli kişinin yılmasını amaçlıyoruz. Bunun için ASP.NET in yanında getirdiği MD5 ve SHA1 algoritmaları olsada bu algoritmalar zayıf olduğundan bunların kullanılmasını önermiyoruz. Kendi algoritmanızı yazabilir ya da daha güvenli olan SHA512 vb algoritmaları kullanabilirsiniz.



Fakat biz burada şifrenin bir kere kriptolanmasınıda önermiyoruz. En az 2 kere farklı algoritmalarla kriptolamalısınız. Böylelikle bir plain-text i kırsa dahi karşısına başka bir plain-text çıkacaktır. Bu durumda yılması daha olası ve kırılması daha uzun sürecektir. Fakat buda bize yeterince güvenli gelmediğinden
tuzlama dediğimiz işlemide uygulamalıyız. Tuzlama işlemi güvenli parolalar oluşturmayan kullanıcılara zorla güvenli parola oluşturmaktan geçer. Bu ne demek derseniz öncelikle neden basit parola kullanılmaması gerektiğini anlatmalıyım. Basit parolalar Rainbow tabloları dediğimiz tablolarda bulunurlar. Bunlar daha öncede oluşturulmuş plain text-clear text mantığında oluşturulmuş tablolardır.

Yani test kelimesinin kelimesinin SHA1 ile şifrelendiğinde ki karşılığının a94a8fe5ccb19ba61c4c0873d391e987982fbbd3 olduğunu tutan tablolar demektir. Kötü niyetli kişi veritabanını ele geçirdiğinde bu SHA1 kodunu gördüğünde basit bir “SHA1 decrypter” Google sorgusu ile bulabileceği ilk sitede SHA1 kodunu yazar ve karşısına test yazısı çıkar. Kullanıcılar ne kadar basit parolalar kullanırsa kullansınlar bunları güvenli hale getirmeliyiz. Bu yüzden kullanıcının diğer bilgilerinden(doğum tarihi,nickname,e-mail vb.) bir salt(tuz) yaratmalıyız ve bunu kişinin parolasına ekleyip kriptolama algoritmalarına göndermeliyiz. Burada dikkat edilmesi gereken husus her kullanıcının salt ı farklı olmalıdır.



Ayrıca parolanın minumum karakter uzunluğu ve komplike olma(Büyük-küçük karakter,!#% vb karakterler) durumlarıda oldukça önemlidir.Çünkü sadece sayılardan oluşan bir parolayı kırmak Brute Force saldırısı ile kolayken içinde hem sayı hem büyük küçük karakter hemde !#+^vb karakterlerin olduğu bir parolayı kırmak kolay değildir.


Özet geçmek gerekirse;

SHA512(RSA((komplike(min8(clear text))+salt))

LFI/RFI Korunma




Bu zafiyet sitemizde kullanıcıdan bir dosya alırken o dosyanın formatını(.exe vb) kontrol etmeden sunucumuza yüklenmesini kabul etmemizden kaynaklanır. Shell adını verdiğimiz zararlı dosyaları sunucumuza yükleyip daha sonra o dosyanın bulunması ile bu açıklık sömürülür. Shell dediğimiz dosyalar sunucunuzdaki bütün dosyaları görme,silme,düzenleme ve yeni dosya ekleme gibi özellikler sağlarlar. Göründüğü üzere bu zafiyet belkide en büyük açıklıklardan birisidir. Bunun için dosya yüklediğimiz alanlarda validation ile kabul ettiğimiz dosya tiplerini belirtmeliyiz.

< asp:RegularExpressionValidator ID="RegularExpressionValidator1" runat="server" ErrorMessage="Dosya formatı uygun değil. (Sadece jpeg formatını kabul eder.)" ValidationExpression="^.+\.((jpg)|(png)|(JPG))$" ValidationGroup="g1" ControlToValidate="FileUpload1">< /asp:RegularExpressionValidator>


Fakat validation tek başına güvenliği sağlamaz. Validation ile beraber .cs kısmındada dosyanın formatını kontrol etmeliyiz. Validationların belli teknikler ile atlatılabildikleri görülmüştür.
Hatalarınızı yüzlerine vurmayın!


Kodlamamızdan ya da kullanıcının yanlış/kötü niyetli parametreler girmesinden dolayı oluşabilecek hata sayfalarımızda mümkün olan en az bilgiyi göstermeli ve hatta başka bir sayfaya göndermeliyiz.Çünkü kötü niyetli kişi için ulaşabileceği en küçük ayrıntı değerlidir.
< system.web>
< customErrors mode="RemoteOnly" defaultRedirect="http://www.siteniz.com/">
< error statusCode="404" redirect="404.aspx"/>

Bu kodda görüldüğü gibi 404 hatası dışında bir hata oluştuğunda anasayfamıza 404 hatası oluştuğunda ise 404.aspx sayfasına kullanıcılarımızı yönlendirecektir.
Kim olduğunuzu bilmesinler




Eğer sadece domain satın alıp daha sonra başkasına satma planınız yok ise whois.sc adresindeki domain bilgilerinizi domain hizmetini aldığınız şirketten gizlemesini isteyin.

HTTP istek türleri

Genellikle web siteleri GET ve POST HTTP isteklerini kullanırlar bunun dışındaki bütün istekleri engelleyebilirsiniz. Engellemek için aşağıdaki kodları yazabilirsiniz.

< requestFiltering>
< verbs allowUnlisted="false">
< add verb="GET" allowed="true"/>
< add verb="POST" allowed="true"/>
< /verbs>
< /requestFiltering>
< /security>
Web Config Dosyanızı kontrol edin

Malum ASP.NET projelerimizin en kritik bilgilerini tuttuğumuz yerlerden biri şüphesiz web.config dosyalarıdır. Web.config dosyalarımızın güvenliğini kontrol etmek için bir araç bulunmakta. Bu araç ile web.config dosyanızı daha güvenli hale getirebilirsiniz. Bunun için
https://www.code.google.com/p/wcsa/

adresinden web.config security analyzer

dosyasını indirip web.config dosyanızı localde kontrol edebilir ve gerekli önlemleri alabilirsiniz.

Yedeklemeyi unutmayın!




Web sitenizin kaynak kodlarını ve veritabanınızın yedek dosyalarını farklı bir yerde saklamayı unutmayın. Olaki bir saldırıya maaruz kaldığınızda elinizde geri yüklemek için güncel dosyalar bulunsun. Veritabanınızı yedekleme yetkisi sizde bulunmuyorsa teknik destek ile iletişime geçin ve veritabanınızın yedeğini isteyin.

Log dosyalarınızı takip edin



Her zaman sitenizde görünür değişiklikler olmasına gerek yok. Kötü niyetli kişi sisteminize sızmayı deniyor olabilir ya da çoktan sızmış ama zarar verici bir eylemde bulunmamış olabilir. Siz her ihtimale karşı düzenli olarak log dosyalarınızı kontrol edin.


Kullanıcı Girişleri


Kullanıcı doğru bilgilerle sisteme giriş yaptığında IP adresi ve sunucu saatini tutun. Bunu her doğru girişte yapmalısınız. Kötü niyetli kişi başka bir yerden kullanıcının şifrelerini çalmış olabilir ve sisteme oymuş gibi girip uygunsuz yorumlar vb. şeyler yapabilir. Gerçek kişi hesabını çalan kişiye dava açmak istediğinde savcılığa vereceğiniz bilgiler olmalı. Burada sunucunun saatini almalısınız. İstemci taraftaki saat değiştirilmiş olabilir. Bu tedbir tabiki VPN kullanan bir hacker için bir anlam ifade etmeyecektir fakat savcılığa vermek için elinizde en azından yeterli bilgilerin bulunması şart.

CAPTCHA kullanın


Bir program tarafından sürekli login sayfanızda bir kullanıcının parolasına brute force
saldırısı düzenlenmesini istemiyorsanız captcha kullanmalısınız. Burada önemli bir nokta her form sayfasında varsayılan olarak kullanmaktansa bilgiler 3 kere yanlış girildiğinde captcha in çıkması kullanıcıyı rahatsız etmeyecektir.

Parola Değiştirme




Parola değiştirme,mail adresi değiştirme vb. alanlarda bilgilerin değiştirilebilesi için mutlaka mevcut parolayı sorun. Çünkü kötü niyetli kişi kurbanın sadece cookie bilgilerini çalarak oturum açmış olabilir. Fakat kurbanın parolasını bilmediği için bilgilerini değiştiremeyecektir. Dilerseniz mevcut parolayı sorduğunuzda doğru bilgiler girilmediğinde oturumu kapatabilir ve hesabın e-mail adresine bilgilendirme e-mail i atabilirsiniz.

Trace i kapatın


Trace web uygulamamız hakkında derince bir bilgi veren sistemdir. Varsayılan olarak zaten kapalı olarak gelmektedir. Kapatmak isterseniz aşağıdaki kodu yazabilirsiniz.

< system.web>
< trace enabled=”false” localOnly=”true” />
< /system.web>
Sakıncalı Http Headerları engelleyin



Http header bilgileri içerisinde oldukça önemli bilgiler taşımaktadır. Tabiki bu gizlediğiniz bilgiler farklı araçlar ile tespit edilebiliyor olsada amacımız hackerın işini zorlaştırmak




< system.webServer>
< httpProtocol>
< customHeaders>
< remove name=”X-Powered-By” /> // Teknoloji bilgisinin döndürülmesini engeller Örn: ASP.Net
< remove name=”X-AspNet-Version” /> //ASP.Net versiyon bilgisinin döndürülmesini engeller.
< /customHeaders>
< /httpProtocol>
< /system.webServer>
HTTP Runtime Değerleri



HTTP runtime değerleri uygulama hakkında birçok ayarı yapabileceğiniz bir alandır.
maxRequestLength=”4096”

özelliği ile sayfaya POST edebileceğiniz en fazla veriyi KB cinsinden sınırlamış olursunuz.

enableHeaderChecking=”true”

özelliği ASP.Net Request Header’larını kontrol ederek zararlı requestlerde hata döndürür.

enableVersionHeader=”false”

özelliği ASP.net versiyon bilgisini gizler.

maxUrlLength=”260”

özelliği adres satırındaki karakterlerin uzunluğunu belirler. Gereksiz ise sayı düşürülmelidir. Varsayılan 260dır.

Publish edin



Web sitenizi web sayfanıza koyarken publish ederek yükleyin. Böylelikle sunucuya sızan birisi kaynak kodlarınıza ulaşamaz hemde sitenizin daha hızlı çalışmasını sağlarsınız.
Kimseye güvenmeyin


Ve son olarak ASP.NET in sağlamış olduğu Validationlara sakın ama sakın güvenmeyin. Evet kullanın fakat tek başına değil. Validationdan sonra her zaman sunucu tarafında kendi kodlarınız ile kontrol edin. Çünkü Validationlar istemci tarafından post edilirken kontrol ediliyor. Örneğin file upload kısmınız var ve .pdf dışındaki dosyaları almak istemiyorsunuz. Bunun kontrolünü sağlamak için hem validation hemde sunucu taraflı koruma kullanın.
string Uzanti = System.IO.Path.GetExtension(FileUpload1.PostedFile.FileName);
Kodunu kullanarak yükleyeceğiniz dosyanın uzantısını alabilir daha sonra if ilede bunu kontrol ettirebilirsiniz.

İki tablo arasında Ortak Kolona göre Update İşlemi Gerçekleştirme

UPDATE T1
SET RECOZKOD1 = T2.STKOZKOD1
FROM URTRECKART T1
    JOIN STKKART T2
        ON T1.[RECKOD] = T2.STKKOD

DataTable Nesnesine Aktarılan Verileri Okuma

DataTable dt = sb.GetDataTable1("sorgu");
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                sb.cmd1("insert into tablo adı(tc,sifre) values ('" + dt.Rows[i]["tc"]+ "','" + dt.Rows[i]["sifre"] + "')");
            }

Uygulamaya Google Captcha Ekleme

//Frontend tarafında ekleyeceğiniz alanlar
<script src="https://www.google.com/recaptcha/api.js" async defer></script>

<div class="g-recaptcha" data-sitekey="site-key"></div>

//Backend tarafında eklemeniz gereken kodlar

var response = Request["g-recaptcha-response"];
            string secretKey = "";
            var client = new WebClient();
            var result = client.DownloadString(string.Format("https://www.google.com/recaptcha/api/siteverify?secret={0}&response={1}", secretKey, response));
            var obj = JObject.Parse(result);
            var status = (bool)obj.SelectToken("success");
            if (status == false)
            {
                lblHata.Visible = true;
                lblHata.Text = "*Lütfen robot olmadığınızı teyit ediniz!";
            }
            else
            {
}

MsSql Serverda Veri tabanını Single user dan Multi user'a Dönüştürme

Herhangi bir nedenden ötürü Single User yaptığınız veri tabanınızı options seçeneğinden Multi User yapmaya çalıştığınızda hata ile karşılaşabilirsiniz. Çözüm;

1-request _session_id=select * from sys.dm_tran_locks where resource_database_id=DB_ID('DB Adı')

2-kill request _session_id

3-alter database DB_Adı set multi_user with no_wait

bu işlemlerden sonra veri tabanınız multi user olarak güncellenmiştir.

16 Eylül 2019 Pazartesi

MsSql Veri tabanında Türkçe Karakter Değişikliğini Düzeltme Kodu

update [Tablo Adı] set [stunadı]=replace(replace(replace(replace(replace(Replace(Replace(Replace(REPLACE([sütunadı],'Ç','Ç'),'ı','ı'),'İ','İ'),'Ö','Ö'),'Å','Ş'),'Ä','Ğ'),'Ü','Ü'),'ö','ö'),'ü','ü')

Asp.NET Web Form'da Excel'den okuduğun veriyi mssql veri tabanına insert etme


       protected void btnUpload_Click(object sender, EventArgs e)
//FileUpLoad Nesnesine eklenen dosyayı kayıt etme işlemi
        {
            if (fluExcel.HasFile) //FileUpload nesnesinde dosya var mı kontrol ediyoruz
            {
                string fileExtension = System.IO.Path.GetExtension(fluExcel.FileName).ToLower();

                if (fileExtension == ".xls" || fileExtension == ".xlsx")
                {
                    string newFileName = new Guid().ToString() + fileExtension;

                    string filePath = System.IO.Path.GetFullPath(Server.MapPath("~/App_Data/"));

                    fluExcel.PostedFile.SaveAs(filePath + newFileName);

                 LoadExcel(newFileName);
                }
                else
                {
                    lblMesaj.Text = "Excel dosyası seçiniz!";
                }

            }

        }

        private void LoadExcel(string newFileName)
        {
            try
            {
                OleDbConnection oleDbConn = new OleDbConnection();
                string path = System.IO.Path.GetFullPath(Server.MapPath("~/App_Data/")) + newFileName;

                if (Path.GetExtension(path) == ".xls")

                {
                    oleDbConn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + path + ";Extended Properties =\"Excel 8.0;HDR=Yes;IMEX=1\"; ");

                }

                else if (Path.GetExtension(path) == ".xlsx") //Ben .xlsx uzantılı dosya eklediğimde Microsoft.ACE.OLEDB.12.0 Sağlayıcısı Yerel Makine Kayıtlı Değil Hatası aldım .xls yüklediğimde çalıştı
                {
                    oleDbConn = new OleDbConnection("Provider = Microsoft.ACE.OLEDB.12.0; Data Source = " + path + ";Extended Properties = \"Excel 12.0 Xml; HDR = YES\";");
                }
                oleDbConn.Close();

                OleDbCommand cmd = new OleDbCommand();
                DataTable dt = new DataTable();
                cmd.Connection = oleDbConn;
                cmd.CommandText = "Select * from [Sayfa1$]"; //Excel'deki sayfa adı
                cmd.CommandType = CommandType.Text;

                OleDbDataAdapter adapter = new OleDbDataAdapter(cmd);

                adapter.Fill(dt);

                grdExcel.DataSource = dt;
                grdExcel.DataBind();
            }
            catch (Exception)
            {
                throw;
            }
        }
private void ReadGridViewWriteSql(string newFileName)
SqlConnection baglanti = new SqlConnection(@"Data Source="";Initial Catalog="";User ID="";Password="";"); //Connection string cümleciğinizi uygun şekilde yazmalısınız.
                baglanti.Open();

                foreach (GridViewRow row in grdExcel.Rows)
                {
                    SqlCommand sorgu = new SqlCommand("insert into deneme (kolon1,kolon2) values ('" + row.Cells[0].Text + "','" + row.Cells[1].Text + "')", baglanti);
                    sorgu.ExecuteNonQuery();
                }
                baglanti.Close();
// https://www.youtube.com/watch?v=OWJnUwW307w adresinden izleyerek oluşturulmuş kodlardır. Dilerseniz izleyerek uygulamalı yapabilirsiniz.