Yazılım.
CevapSitesi.com Beta!
Çözüm Noktası
Facebook, Twitter, Google+ veya e-posta ile paylaşın.
| Sorular | Makaleler | Üyeler | Etiketler  | İletişim
Soru sormak ya da cevap vermek için;
giriş yapın veya üye olun.

Sosyal medya hesaplarınızla da giriş yapabilirsiniz.
0

İframe ile başka bir domaindeki sayfayı çalıştırmak mümkünmü? veri tabanıyolu değişmiyor.

Merhaba,
Aşağıdaki şekilde takvim kodum var bunu bir vps panelimdeki başka bir domainden çağırmam gerekiyor (sebebi ise diğer projemde çalıştıramamam iframe ile çekerek daha kolay çalıştırmam.) Sqlhelper class la çekdiği için webconfigren direkt o domaindeki A veritabanı bağlantısını görüyor. Ben ise Aynı sunucudaki B veritabanına ilgili yerlere bağansın istiyorum. bu mümkünmü?  Mümkün ise koduma göre bir bğlantı oluşturabilirmisiniz? Kodumutamamını sizle paylaşıyorum.
public partial class EtkinlikD : System.Web.UI.Page
{

    DateTime[] dates;
    DataTable dt;
    DataList dl = new DataList();
    protected void Page_Load(object sender, EventArgs e)
    {
        TakvimLoad();
    }
    #region takvimload
    private void TakvimLoad()
    {
        if (!IsPostBack)
        {
   
            using (var helper = new SqlHelper())
            {
                var tmp = new DataTable();

                tmp.Columns.Add("EtkinlikID");
                tmp.Columns.Add("Tarih");
                tmp.Columns.Add("Etkinlik");
                tmp.Columns.Add("Saat");
                tmp.Columns.Add("Katilimci");
                tmp.Columns.Add("Yer");
                tmp.Columns.Add("Olusturulma");

                var dt = helper.CommandText("select * from ETKINLIK where ISNULL('Tarih','') <> '' ").ToDataTable();
                for (int i = 0; i < dt.Rows.Count; i++)
                {
                    tmp.Rows.Add(dt.Rows[i]["EtkinlikID"], Convert.ToDateTime(dt.Rows[i]["Tarih"]).ToShortDateString(), dt.Rows[i]["Etkinlik"], dt.Rows[i]["Saat"],
                                 dt.Rows[i]["Katilimci"], dt.Rows[i]["Yer"], Convert.ToDateTime(dt.Rows[i]["Olusturulma"]).ToShortDateString());
                }

                GridView1.DataSource = tmp;
                GridView1.DataBind();
                dt = tmp;

                var events = "[";
                for (int i = 0; i < dt.Rows.Count; i++)
                {
                    var date = Convert.ToDateTime(dt.Rows[i]["Tarih"]);
                    events += "{ " +
                       "title: '" + dt.Rows[i]["Etkinlik"] + "'," +
                       "start: '" + date.Year + "-" + (date.Month.ToString().Length == 1 ? "0" + date.Month.ToString() : date.Month.ToString()) + "-" +
                       (date.Day.ToString().Length == 1 ? "0" + date.Day.ToString() : date.Day.ToString()) + "T" + dt.Rows[i]["Saat"].ToString() + "'," +
                       "Katilimci: '" + dt.Rows[i]["Katilimci"].ToString() + "'," +
                       "Tarih: '" + date.Day + "-" + date.Month + "-" + date.Year + " " + dt.Rows[i]["Saat"].ToString() + " - " + date.ToString("dddd") + "'},";
                }
                eventsLit.Text = events + "]";
            }
        }
    }
    #endregion

    #region Calendar1_DayRender
    protected void Calendar1_DayRender(object sender, DayRenderEventArgs e)
    {
        TakvimAyar(e);
    }
    #endregion

    #region TakvimAyar
    private void TakvimAyar(DayRenderEventArgs e)
    {
        for (int i = 0; i <= dates.GetUpperBound(0); i++)
        {
            /* Diziye eklenen tarih formatı saatli ve dakikalı olduğu için
             * takvim karşılaştırmaları string ile short date e çevirip yapmak gerekiyor.
             * Yoksa saatli girilen takvim olaylarını gün ile eşleştirip göstermiyor.
            */
            if (e.Day.Date.ToShortDateString() == dates[i].ToShortDateString())
            {

                e.Day.IsSelectable = true;
                e.Cell.BackColor = System.Drawing.Color.FromName("#f79646");
                e.Cell.ForeColor = System.Drawing.Color.White;
                e.Cell.CssClass = "qtip";

                //Takvim hücresindeki geçerli tarihi bir değişken alıp, SQL tarih formatına çeviriyoruz
                //SQL sorgusunda bu tarihteki olayları listeliyoruz
                string sqlTarih = String.Format("{0:yyyy-MM-dd}", e.Day.Date);
                string sorgu = "Select * from ETKINLIK Where Tarih like '%" + sqlTarih + "%'";

                using (var helper = new SqlHelper())
                {
                    var dt = helper.CommandText(sorgu).ToDataTable();
                    string takvimOlay = "";

                    for (int t = 0; t < dt.Rows.Count; t++)
                    {

                        takvimOlay += @"<div style=""text-align=left;"">";
                        takvimOlay += "     <b>Etkinlik</b>: " + dt.Rows[t]["Etkinlik"].ToString();
                        takvimOlay += "     <br/><b>Tarih</b>: " + dt.Rows[t]["Tarih"].ToString().Substring(0, 10);
                        takvimOlay += "     <br/><b>Saat</b>: " + dt.Rows[t]["Saat"].ToString().Substring(0, 5);
                        takvimOlay += "     <hr style=color:#ED9D54; />";
                        takvimOlay += "</div>";
                    }
                    e.Cell.Attributes.Add("title", takvimOlay);

                }
            }
        }
    }
    #endregion
}


Soran:02.04.18 21:27
misafir  
Bu hangi SqlHelper sınıfı? Bundan bir kaç tane var. Benim bildiğim Microsoft.ApplicationBlocks.Data isim alanına sahip http://www.microsoft.com/en-us/download/details.aspx?id=435  adresinden indiriliyor. Bunda her metodun kullanacağı bağlantıyı da bildirebileceğiniz bir parametresi bulunuyor. Hangisini kullandığını söylerseniz belki yardımcı olabiliriz. →  cevapsitesi 05.04.18 12:12

1 Cevap

0
Yoruma cevap gelmedi. Ben hem bir cevap hem de bir kaç öneri yazayım.

Yorumda bahsettiğim Microsoft.ApplicationBlocks.Data isim alanındaki SqlHelper sınıfını kullanırsan bunun ExecuteDataset metodu ile helper.CommandText ifadesinde yaptığını yapabilirsin. ExecuteDataset metodunun birinci parametresi bağlantı olarak bildiriliyor ve metot DataSet döndürüyor. Bu şekilde istediğin bağlantıyı kullanarak sorgu yapabilirsin.

Kullanımı:

ExecuteDataset ( SqlConnection connection, CommandType commandType, string commandText ) : DataSet

Web sayfamıza bir kaç kişi girdiğinde bir sorun olmayacaktır ama bir kaç yüz veya bir kaç bin kişi girdiğinde şunlar sorun çıkarır, sunucuyu meşgul eder:

DataSet kullanmak yerine doğrudan ExecuteReader kullanarak verileri okuyup kullanmak daha iyidir. SqlDataRedar döndüren bu metod sadece ileri okuma imkanı verir, çok daha hızlıdır ve çok az kaynak kullanır.

C# programlama dilinin en yavaş yaptığı işlerden biriisi String'leri birbirine eklemektir. Ekleme için her eklemede yeni bir String oluşturulur. Bunun yerine metin birleştirme işlemlerinde daha hızlı olan StringBuilder kullanılmalı.

Örneğin üstteki kod için şöyle bir şey yapılabilir:

StringBuilder takvimOlay = new StringBuilder();
for (int t = 0; t < dt.Rows.Count; t++)
{
    sb
      .Append("<div style='text-align=left;'>")
      .Append("     <b>Etkinlik</b>: ").Append(dt.Rows[t]["Etkinlik"])
      .Append("     <br/><b>Tarih</b>: ").Append(dt.Rows[t]["Tarih"].ToString().Substring(0, 10))
      .Append("     <br/><b>Saat</b>: ").Append(dt.Rows[t]["Saat"].ToString().Substring(0, 5))
      .Append("     <hr style='color:#ED9D54;' />")
      .Append("</div>");
}
e.Cell.Attributes.Add("title", takvimOlay.ToString());

Tabi aynı durum events değişkeni içinde geçerli.


Cevaplayan: 06.04.18 09:44
cevapsitesi
102,034p 16ü