Bu dersimizde sizlerle Asp net Veri Çekme Botu nasıl yapılır onu öğreneceğiz. Bu bot ile url 'sini girdiğiniz sitenin title ve içeriğini nasıl çekiceğinizi öğreneceğiz. Hemen bunu bir örnek ile açıklamaya çalışalım. Örneğimizde bir adet button,  4 adet textbox bulunmaktadır.

 

        string adres1 = TextBox2.Text;

        WebResponse cevap1;

        WebRequest istek1 = HttpWebRequest.Create(adres1);

        cevap1 = istek1.GetResponse();

        CultureInfo tr = new CultureInfo("tr-TR");

        StreamReader donenbilgi1 = new StreamReader(cevap1.GetResponseStream(),  Encoding.GetEncoding(tr.TextInfo.ANSICodePage));

        string gelen1 = donenbilgi1.ReadToEnd();

        int titlebaslangic = gelen1.IndexOf("<title>") + 7;

        int titlebitis = gelen1.Substring(titlebaslangic).IndexOf("</title>");

        TextBox3.Text = gelen1.Substring(titlebaslangic, titlebitis);

Yukarıdaki örnekte TextBox2.Text; girilen url deki sitenin title yani başlık kısmı çekilmekte ve  TextBox3.Text yazdırılıyor. Kodlarımızın içeriğini inceleyelim.    CultureInfo tr = new CultureInfo("tr-TR");   StreamReader donenbilgi1 = new StreamReader(cevap1.GetResponseStream(), Encoding.GetEncoding(tr.TextInfo.ANSICodePage)); bu kısım türkçe karakter hatalarını düzentmek için kullanılmaktadır.  int titlebaslangic = gelen1.IndexOf("<title>") + 7; bu kısımda <title> kodunu gördüğün yerden itibaren yazıları çek ama ilk 7 karakter olan <title> alma almına gelmektedir.   int titlebitis = gelen1.Substring(titlebaslangic).IndexOf("</title>"); bu kısım ise </title> kodu görene kadar yazıyı çekmeye devam et  anlamına gelmektedir.

Yukarıdaki kodları kullanarak kendinize istediğiniz siteden veri çekebilirsiniz. Bunu için yapmanız gereken tek şey siteleri iyi analiz ederek. Nerden çekmeye başlayıp nerede bitireceğinizi iyi yorumlamanız. Tabiki bunu yapmak için biraz kodlamayı bilmeniz gerekli.



Bu yazımızda benim çok zamanımı alan max_user_connections  hatasını anlatmaya çalışacağım. Windows sunuculardaki Max_user_connections hatası database 'in sorgulama cevap verememesinden kaynaklanmaktadır. Bu hatayı düzeltmek için bağlantılarınızı optimize etmeniz gerekir.  Bağlantı cümlenizdeki Max Pool Size="1000" yükseltin. Ayrıca açtığınız sorgulamayı mutlaka kapatınız.  Örneğin;

baglanti.Open();
Line 119: {
Line 120: string deneme;

.....
....
baglanti.Dispose();
baglanti.Close();

Tüm bunları yaptınız fakat sorun halen düzelmediyse plesk bağlanıp IIS Application Pool kısmına geçin. Global Settings sekmesinde 3 cü seçenek olan ” Always place all domains in the shared application pool ” ( Tüm domainleri ortak haavuzda konumlandır ) seçili olup olmadığını doğrulayın. Bunları yapmanıza rahmen bu hatayı alıyorsanız. Hosting firmanızı değiştirmenizi öneririm.



Projelerinizde Mysql veritabanı kullanıyor ve MySql.Data.MySqlClient sınıfını kullanacaksanız MySql.Data.dll dosyasını projenizin Bin dosyası içine dahil etmeniz gerekmektedir. Bu işlemi gerçekletirdikten sonra MySqlConnection gibi nesneleri kod sayfanızda kullanabilirsiniz. Bir önceki makalemizde kategori adındaki veri tabanımıza asp.net te MySql veritabanına veri ekleme işlemini gerçekleştirdik . Bu makalemizde ise bu veriyi sileceğiz. 

Sayfanıza 4 tane textbox ekleyim adlarını aşağıdaki gibi düzenleyin, 1 label ve 1 tane button ekleyiniz. Butonun Button1_Click olayına aşağıdaki kodları yerleştirin..

using System;
using System.Data;
using MySql.Data.MySqlClient;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

public partial class admin_kategori : System.Web.UI.Page
{
    string bag = ConfigurationManager.ConnectionStrings["LocalMySqlServer"].ConnectionString;

protected void Button1_Click(object sender, EventArgs e)
MySqlConnection baglanti3 = new MySqlConnection(bg); 
MySqlCommand komut3 = new MySqlCommand("delete from ana_menu where id=?id", baglanti3);
komut3.Parameters.AddWithValue("?id", anakatid.Text);
baglanti3.Open();
komut3.ExecuteNonQuery();
baglanti3.Close();
Label1.Text = "Seçilen veri silindi."}

}

 

web.config dosyasındaki connectionString bloğunu kendinize göre ayarlayınız.

<configuration>
  <appSettings>
  <add key="LocalMySqlServer" value="Server=(local);Databasename=databaseadı;uid=databasekullanıcıadı;pwd=şifre;" />
  </appSettings>
  <connectionStrings>

  <connectionStrings>



Projelerinizde Mysql veritabanı kullanıyor ve MySql.Data.MySqlClient sınıfını kullanacaksanız MySql.Data.dll dosyasını projenizin Bin dosyası içine dahil etmeniz gerekmektedir. Bu işlemi gerçekletirdikten sonra MySqlConnection gibi nesneleri kod sayfanızda kullanabilirsiniz. Mysql veritabanını hazırlamak içinde  APPSERV-WIN32-2.4.9.EXE dosyasını indirmenizi tavsiye ederim. Dosyayı kurduktan sonra kategori adında bir tablo oluşturun ve bu tablonun katid,sira,ana_menu,aciklama alanlarını oluşturun. Şimdi asp.net te veri ekleme işleminin kodlarına geçelim.

Sayfanıza 4 tane textbox ekleyim adlarını aşağıdaki gibi düzenleyin, 1 label ve 1 tane button ekleyiniz. Butonun Button1_Click olayına aşağıdaki kodları yerleştirin.

using System;
using System.Data;
using MySql.Data.MySqlClient;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

public partial class admin_kategori : System.Web.UI.Page
{
    string bag = ConfigurationManager.ConnectionStrings["LocalMySqlServer"].ConnectionString;

    protected void Button1_Click(object sender, EventArgs e)
    {
        MySqlConnection baglanti = new MySqlConnection(bag);
        string strsql = "insert into kategori (katid,sira,ana_menu,aciklama) values (?katid,?sira,?ana_menu,?aciklama)";
        MySqlCommand komut = new MySqlCommand(strsql, baglanti);
        komut.Parameters.AddWithValue("?katid", Katid.Text);
        komut.Parameters.AddWithValue("?sira", Sno.Text);
        komut.Parameters.AddWithValue("?anamenu", madi.Text);
        komut.Parameters.AddWithValue("?aciklama", ack.Text);
        baglanti.Open();
        komut.ExecuteNonQuery();
        baglanti.Close();
        Label1.Visible = true;
        Label1.Text = "Kategori başarıyla ekledi";
     }

}
 web.config dosyasındaki connectionString bloğunu kendinize göre ayarlayınız.

<configuration>
  <appSettings>
  <add key="LocalMySqlServer" value="Server=(local);Databasename=databaseadı;uid=databasekullanıcıadı;pwd=şifre;" />

  </appSettings>
  <connectionStrings>



Asp.net ile FCK Editör kurulumu ve kullanımı

     Bu makalemde fck metin editörünün kurulumu ve kullanımı anllatmaya çalışacağım.Daha önce fckeditörü  www.fckeditor.net/download adresinden indirebilirsiniz.  Öncelikle asp.net bir uygulama açınız.Uygulamanıza Fck editörünün klasörleri yapıştırınız. Daha sonra add reference tıklayınız.



 

      Daha sonra  karşınıza gelen Add Reference menüsünden Browse sekmesine geçiniz ve FCKeditor.Net_2.6.3\bin\Debug\2.0 klasörü altında bulunan  fck editörün dll dosyasını seçip ok butonuna basınız
 

 

Bir sonraki aşamada  toolbox boş bir yerde mouse sağ tuşuna basarak karşımıza gelen seçeneklerden Choose Item seçiniz. Choose Toolbox Items penceresinden Browse basarak fck editörün dll dosyasını bulun ve ok tuşana basınız.

 

    Uygulamanıza fck editörü koymadan önce fck editörün web.config dosyasında bazı ayarlamaları yapmamız gerekir.

    <appSettings>
        <add key="FCKeditor:BasePath" value="FCKeditor_2.6.3/fckeditor/"></add>
        <add key="FCKeditor:UserFilesPath" value="resimler/"></add>
    </appSettings>

Birinci anahtarımızda fck editörün bulunduğu klasörün yerini belirtiyoruz.İkinci ise Resim uplaod ediceğimiz dosyanın adı. Daha sonra  sayfanızın aspx  kısmına

<%@ Register Assembly="FredCK.FCKeditorV2" Namespace="FredCK.FCKeditorV2" TagPrefix="FCKeditorV2" %>

kodunu ekleyin ve bir adet  FCKeditor atın. İşte bu kadar.

 <fckeditorv2:fckeditor id="FCKeditor1" runat="server" basepath="~/FCKeditor_2.6.3/fckeditor/" Height="400px"></fckeditorv2:fckeditor>





Güvenlik resmi Oluşturma

     Bu makalemizde size güvenlik resmi oluşturmayı anlatmaya çalışıcağım.Güvenlik resmi web sitelerinin kullanıcılarından bilgi alınırken kullanılan resimdir. Örneğin yorum göndermede ,sipariş verme vb. konularda kullanılır.

Aşağıdaki örneğimizde güvenlik resmi oluşturma bir sesion atama işlemi yapıcağız...

guvenlikresim.aspx.cs :

using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;

protected void Page_Load(object sender, EventArgs e)
    {
      {
         Bitmap resim = new Bitmap(180, 20);
        string harfler = "1234567890ABCDEFG";
        Graphics grafik = Graphics.FromImage(resim);
        grafik.FillRectangle(new SolidBrush(Color.FromArgb(185, 185, 185)), 0, 0, 180, 20);
        Font yazi_tipi = new Font("times new roman", 12, FontStyle.Bold);
        Random rastgele = new Random();
        SolidBrush firca = new SolidBrush(Color.Green);
        string karakter = "";
        string kod = "";
        for (int i = 0; i < 6; i++)
        {
            karakter = harfler[rastgele.Next(0, harfler.Length - 1)].ToString();
            grafik.DrawString(karakter, yazi_tipi, firca, i * 28 + 6, 0);
            kod += karakter;
        }
        resim.Save(Response.OutputStream, ImageFormat.Jpeg);
        Session["kod"] = kod;
      }
    }  

    Sesion atamamızın nedeni ise atadığımız sesion girilen verilerin doğru olup olmadığı karşılaştırmamız çin gereklidir. Örneğin Aşağıdaki guvenliktxt adında bir textbox girilen yazıların sesion eşit olması durumuzda gerçekleşecek olaylar:

 protected void Button1_Click(object sender, EventArgs e)
   { {
    if ((guvenliktxt.Text == Session["kod"].ToString()))
      
        {
            //doğru girildiğinde yapılacak komutlar
        }
   }

Güvenlik resmini ise diğer sayfalarımızda Aşağıdaki gibi çağırıp kullanabiliriz.

<asp:Image ID="Image1" runat="server" ImageUrl="guvenlikresim.aspx"/>


 Güvenlik resmi sitelerimizin güvenliği için gereklidir.Çünkü Sitelerimize gelecebilicek saldırılara karşı gerekli olabilir



Asp.net Query String Kullanımı

  Bu makalemizde Asp.net uygulamalarında kullanılan Ouery string kodu açıklamaya çalışacağız.QueryString kodu makalegöster gibi sayfalarımızda kullanıdığımız bir koddur QueryString gelen değer ile veritabanından gelen değeri karşılaştırıp veritabanındaki verilerin detaylarına gitmemizi sağlar.

  Öncelikle makale adında bir veritabanımız olduğunu varsayalım. makale veritabanımızın alanları: makaleid , Baslik, yazar, makale

SQL veritabanı için:

makaleler.aspx.cs:


 protected void Page_Load(object sender, EventArgs e)
  {
    string bg = ConfigurationManager.ConnectionStrings["LocalSqlserver"].ConnectionString;
    SqlConnection baglanti = new SqlConnection(bg);
    SqlCommand komut = new SqlCommand("Select  * From makale", baglanti);
    DataTable veriTablosu = new DataTable();
    SqlDataAdapter veriAdaptoru = new SqlDataAdapter(komut);   
    baglanti.Open();
    veriAdaptoru.Fill(veriTablosu);
    SqlDataReader oku = komut.ExecuteReader();
    if (oku.Read())
    {
    DataList1.DataSource = veriTablosu;
    DataList1.DataBind();

    }
    baglanti.Close();
  }

  Bu şekilde datalist kontrolümüzü doldurduk ve

makaleler.aspx:

    <asp:DataList ID="DataList1" runat="server" DataKeyField="makaleid">
        <ItemTemplate>
           <table border="0">
           <tr><asp:HyperLink ID="HyperLink1" runat="server" Text ='<%# Eval("Baslik") %>' NavigateUrl ='<%# "~/makalegoster.aspx?Makaleid="+Eval("Makaleid")%>'>HyperLink</asp:HyperLink></td></tr>                 
           </table>    
         </ItemTemplate>
         <AlternatingItemStyle BackColor="Gainsboro" />
     </asp:DataList>
 
 Şeklinde datalistimize eklediğimiz hyperlinle makalegoster.aspx sayfamıza makaleid'sine gönderiyoruz.Makalegöster sayfamızdaki kod:


makalegoster.aspx.cs:


 protected void Page_Load(object sender, EventArgs e)
  {
    string bg = ConfigurationManager.ConnectionStrings["LocalSqlserver"].ConnectionString;  
    SqlConnection baglanti = new SqlConnection(bg);
    SqlCommand komut = new SqlCommand("Select * From makale where makaleid= @ Makaleid", baglanti);
    komut.Parameters.AddWithValue("@Makaleid", Convert.ToInt32(Request.QueryString["makaleid"]));
    komut.Connection = baglanti;
    SqlDataAdapter veriAdaptoru = new SqlDataAdapter(komut);
    DataTable veriTablosu = new DataTable();
    baglanti.Open();
    veriAdaptoru.Fill(veriTablosu);
    SqlDataReader oku = komut.ExecuteReader();
     {
        if (oku.Read())
   {
      Response.Write("<br/>"+oku["makale"]);
   }
     }
  }

 Görüldüğü gibi where ile query string'ten gelen değeri veritabanında makaleid değeri ile karşılaştırdık ve o makaleid'ye ait detayları sayfamıza yazdırdı.

 web.config dosyasındaki connectionString bloğunu kendinize göre ayarlayınız.

<connectionStrings>
     
<add name="LocalSqlserver"
       connectionString="Data Source=.\SQLEXPRESS;Integrated Security=True; User Instance=True;AttachDBFilename=|DataDirectory|aspnetdb.mdf;" providerName="System.Data.SqlClient">
     
</add>
  </connectionStrings>

 

Access Veri tabanı için:

   App_Data içinde aspNetDb.mdb adında bir veri tabanımız olduğunu var sayalım.makale veritabanımızın alanları: makaleid , Baslik, yazar, makale

makaleler.aspx.cs:

 protected void Page_Load(object sender, EventArgs e)
  {
      
    OleDbConnection baglanti = new OleDbConnection("Provider=Microsoft.Jet.Oledb.4.0; Data Source=" + Server.MapPath("~/App_Data\\ASPNetDB.mdb"));
    OleDbCommand komut = new OleDbCommand("select * From makale where makaleid = @ makaleid", baglanti);
    komut.Parameters.AddWithValue("@Makaleid", Convert.ToInt32(Request.QueryString["makaleid"]));
    DataSet Mydataset = new DataSet();
    OleDbDataAdapter MYdataAdap = new OleDbDataAdapter(komut);
    baglanti.Open();
    veriAdaptoru.Fill(veriTablosu);
    OleDbDataReader oku = komut.ExecuteReader();
    if (oku.Read())
    {
      DataList1.DataSource = veriTablosu;
      DataList1.DataBind();
    }
    baglanti.Close();
  }

  Bu şekilde datalist kontrolümüzü doldurduk ve

makaleler.aspx :

    <asp:DataList ID="DataList1" runat="server" DataKeyField="makaleid">
        <ItemTemplate>
           <table border="0">
           <tr><asp:HyperLink ID="HyperLink1" runat="server" Text ='<%# Eval("Baslik") %>' NavigateUrl ='<%# "~/makalegoster.aspx?Makaleid="+Eval("Makaleid")%>'>HyperLink</asp:HyperLink></td></tr>                 
           </table>    
         </ItemTemplate>
         <AlternatingItemStyle BackColor="Gainsboro" />
     </asp:DataList>
 
 Şeklinde datalistimize eklediğimiz hyperlinle makalegoster.aspx sayfamıza makaleid'sine gönderiyoruz.Makalegöster sayfamızdaki kod:

makalegoster.aspx.cs:

 protected void Page_Load(object sender, EventArgs e)
  {
  
    OleDbConnection baglanti = new OleDbConnection("provider=microsoft.jet.oledb.4.0; data source=" + Server.MapPath("~/App_Data/aspNetDb.mdb"));
    string strsql="Select * from makale where (makaleid = @ makaleid";
    OleDbCommand komut=new OleDbCommand(strsql,baglanti);
    komut.Parameters.AddWithValue("@makaleid",Convert.ToInt32(Request.QueryString["makaleid"]));
    komut.Connection=baglanti;
    baglanti.Open();
    OleDbDataReader oku=komut.ExecuteReader();
    {
        if(oku.Read())
        {
            Response.Write("<br/>"+oku["makale"]);
        }
    }
  }

  Görüldüğü gibi where ile query string'ten gelen değeri veritabanında makaleid değeri ile karşılaştırdık ve o makaleid'ye ait detayları sayfamıza yazdırdı.



Datalist ile Sayfalama

 Datalist gridview gibi veri tabanından gelen veri listelemeye yarar. Datalist allowpaging özeliğini göremezsiniz.Allowpagin dataliste bulunan veriler sayfalara böler. Örneğin datalist ile veri tabanınızdaki veri listeliyorsunuz. Bu makaleler çoğaldıkta sayfanız bulunan datalist aşağı doğru uzar gider.Bu makalemizde datalist Pagin özeliği koymayı göstermeye çalışacağız.

default.aspx :
<%@ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default" %>

<html>
<head runat="server">
    <title>Untitled Page</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    <table border="0">
            <tr><td>
        <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label></td></tr>
        <tr><td>
        <asp:Button ID="cmdPrev" runat="server" Text="<<" OnClick="cmdPrev_Click" /><asp:Button ID="cmdNext"
            runat="server" Text=">>" OnClick="cmdNext_Click" /></td></tr>
   </table>
   
        <asp:DataList ID="DataList1" runat="server" BorderStyle="Dashed" BorderWidth="1px">
        <ItemTemplate>
        <table border="0">
         <tr><td>Konu: <asp:Label ID="aciklamaLabel" runat="server" Text='<%# Eval("konu") %>' ForeColor="Gray"></asp:Label></td></tr>
          <tr><td>Makale: <asp:Label ID="Label2" runat="server" Text='<%# Eval("makale") %>' ForeColor="Gray"></asp:Label></td></tr>
        </table>
        </ItemTemplate>
        <AlternatingItemStyle BackColor="Gainsboro" />
        </asp:DataList>
   
    </div>
    </form>
</body>
</html>

default.aspx.cs :

using System;
using System.Data;
using System.Data.OleDb;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

public partial class aspnet : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
     
        doldur();
 
    }
    public void doldur()
    {
        OleDbConnection baglanti = new OleDbConnection("Provider=Microsoft.Jet.Oledb.4.0; Data Source=" + Server.MapPath("~/App_Data\\access.mdb"));
        OleDbCommand komut = new OleDbCommand("SELECT * FROM makale", baglanti);
        DataSet Mydataset = new DataSet();
        OleDbDataAdapter MYdataAdap = new OleDbDataAdapter(komut);
        baglanti.Open();
        MYdataAdap.Fill(Mydataset);
        baglanti.Close();
        PagedDataSource pds = new PagedDataSource();
        pds.DataSource = Mydataset.Tables[0].DefaultView;
        pds.AllowPaging = true;
        pds.PageSize = 3;
        pds.CurrentPageIndex = CurrentPage;
        Label1.Text = "Sayfa: " + (CurrentPage + 1).ToString() + " of " + pds.PageCount.ToString();
        cmdPrev.Enabled = !pds.IsFirstPage;
        cmdNext.Enabled = !pds.IsLastPage;
        DataList1.DataSource = pds;
        DataList1.DataBind();
    }
    public int CurrentPage
    {
        get
        {
            object o = this.ViewState["_CurrentPage"];
            if (o == null)
                return 0;   // default to showing the first page
            else
                return (int)o;
        }

        set
        {
            this.ViewState["_CurrentPage"] = value;
        }

    }
    protected void cmdPrev_Click(object sender, EventArgs e)
    {        
        CurrentPage -= 1;
        doldur();
    }
    protected void cmdNext_Click(object sender, EventArgs e)
    {
        CurrentPage += 1;
        doldur();
    }
}

   Yukarıdaki sayfanının acıklaması doldur adına bir fonksiyon tanımlıyoruz."OleDbConnection baglanti = new OleDbConnection()" kısmında  veritabanımızla olan bağlatıya kurmak için bir değişken tanızlıyoruz."OleDbCommand komut = new OleDbCommand("SELECT * FROM makale, baglanti);" ise veritabanıdaki tabloyu sql kodu ile seçmek için komut adında bir değiken tanımlıyoruz ve baglanti değişkeniyle ilişkilendiriyoruz. Veri tabanımızı bir dataset ve dataadapter içinde tutmamız gerekekir. bunun için bir dataset ve dataadapter değişkenlerini tanımlıyoruz. Data adapterimizi komut ile ilişkilendiriyoruz. Şimdiye kadar anlatığımız yer bağlati yolu tanımlıyıp ve tabloyu seçip bir dataset aktarmaktı.


   Dataliste Allowpaging özeliğini açmak içinse "PagedDataSource pds = new PagedDataSource();" pds adınada bir PagedDataSource değişkeni tanımlıyoruz. " pds.DataSource = Mydataset.Tables[0].DefaultView;" pds adındaki değişkenin ver kaynağı tanımlıyoruz Dikkat etiyseniz burada Mydataset kullanıyoruz yukarı kodları bunun için yazıyoruz yoksa sayfamızda bir listeleme olmazdı. "pds.AllowPaging = true;" ile allowpaging özeliği açıyoruz. "pds.PageSize = 4;" sayfada kaçıncı veriden sonrası diğer sayfa göstereceğini tanımlıyoruz. 
  

    Daha sonra CurrentPage adında bir fonksiyon daha tanımlıyoruz. bu butona tıklamadan önceki sayfayı göstermek için.

    Butonların click olayında ise "CurrentPage -= 1;" bir önceki sayfaya gitmeyi, "CurrentPage += 1;" bir sonraki sayfaya gitmeyi sağlıyoruz..

 Aşağıdaki linke tıklayarak Örnek uygulamayı inderebilirsiniz...

Datalist uygulaması



« 1 2 »