Archive for the Category »Yaptım «

C# ile Sınırsız Html(ul,li) Menü (Recursive Functions)

En çok başımızı ağrıtan uygulamalardan birisi de sınırsız menü yapım işlemleridir.Dannyz arkadaşıma lazım olan bu menünün C# ile kodlanmış olan halini burda paylaşmak istiyorum.

Oracle veritabanı :

CREATE TABLE SINIRSIZ_MENU
(
  ID      INTEGER,--menü id
  ADI     VARCHAR2(20 BYTE) NOT NULL, -- menü adı
  UST_ID  INTEGER, -- menü üst id, eğer üst id yoksa değeri null olmalıdır
  URL VARCHAR(255) -- adres
)

C# kodları :

public string Sinirsizmenu(string pPrnt)
{
            var dbs = new VeritabaniBaglantiYap("thegkmnkc", "localhost", "****");
            var dt = dbs.SorguSonucu("select coalesce(M.UST_ID,0) ust_id,id,adi from sinirsiz_menu m order by m.id asc"); // DataTable
            var diziler = new Hashtable();
            var indArr = new int[dt.Rows.Count];
            for (var i = 0; i < dt.Rows.Count; i++)
            {
                var tmp = new Hashtable();
                tmp["baslik"] = dt.Rows[i]["ADI"].ToString();
                tmp["parent"] = dt.Rows[i]["UST_ID"].ToString();
                tmp["url"] = dt.Rows[i]["URL"].ToString();
                diziler[dt.Rows[i]["ID"].ToString()] = tmp;
                indArr[i] = Convert.ToInt32(dt.Rows[i]["ID"].ToString());
            }

            var hasChilds = false;
            var mnuStr = "";
            for (var i = 0; i < diziler.Count; i++)
            {
                var enm = (Hashtable)diziler[indArr[i].ToString()];
                var enim = enm.GetEnumerator(); //IDictionaryEnumerator
                enim.MoveNext();
                var anahtar = indArr[i].ToString();
                var baslik = enim.Value;
                enim.MoveNext();
                var prnt = enim.Value.ToString();
                enim.MoveNext();
                var url = enim.Value.ToString();

                if (pPrnt != prnt) continue;
                if (!hasChilds)
                {
                    hasChilds = true;
                    mnuStr += "<ul>";
                }
                mnuStr += "<li><a href="\">" + baslik + "</a>";
                mnuStr += Sinirsizmenu(anahtar);
                mnuStr += "<li>";
            }
            if (hasChilds)
                mnuStr += "</ul>";
            return mnuStr;
}

bu ilk hali, daha sonra optimizasyon yapıp yayınlayacağım yine burada, ancak istenilen yapıyı oluşturuyor şimdilik.

Parse Url in C#.NET

Regex pattern = new Regex("(?
http(s)?|ftp)://(?([A-Za-z0-9-]+\\.)*(?[A-Za-z0-9-]+\\.[A-Za-z0-9]+))+((:)?(?
[0-9]+)?(/?)(?
(?[A-Za-z0-9\\._\\-]+)(/){0,1}[A-Za-z0-9.-/]*)){0,1}");

ya da

string url = "http://my.domain.com:8000?arg1=this&arg2=that";
System.Uri uri = new System.Uri(url);

// port bilgisi
int port = uri.Port;

// host adı (my.domain.com)
string host = uri.Host;

// protokol bilgisi
string protocol = uri.Scheme;

// saf url
string cleanURL = uri.Scheme + "://" + uri.GetComponents(UriComponents.HostAndPort, UriFormat.UriEscaped);

Transact-SQL(T-SQL) MsSQL

 

   İşim gereği çok fazla sayıda veritabanı ile haşır-neşir olmaktayım. Bunlardan birisi de MsSql veritabanı. En az 500 adet tablosu olan bir veritabanının tablolarının satır ve sütunlarının içerisinde çoğu kez kaybolduğum tartışmasız bir gerçek ne yazık ki. Hele bu tabloların bir kısmında veri yoksa, boşu boşuna orda durması size daha fazla zaman kaybettirir. Bu yüzden içerisinde kayıt olmayan tabloları silmek yada adını değiştirmek için T-SQL e işim düştü. Burada cursor ve loop’lardan, değişken tanımlayıp, dinamik sorgu çalıştırmaya ve sonuçları ekranda göstermeye kadar hazır, fırından yeni çıkmış kodlarımı yayınlıyorum…

DECLARE @TABLO_ADI VARCHAR(50)
DECLARE @SORGU NVARCHAR(100)
DECLARE @KAYIT_SAYISI int

DECLARE crstab1 CURSOR FOR
SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES

OPEN crstab1

WHILE @@FETCH_STATUS = 0
BEGIN
   set @KAYIT_SAYISI=0
   FETCH NEXT FROM crstab1 INTO @TABLO_ADI
   set @SORGU='SELECT @KAYIT_SAYISI=COUNT(*) FROM '+@TABLO_ADI
   execute sp_executesql @SORGU
   if @KAYIT_SAYISI=0
   BEGIN
      set @SORGU='sp_rename '''+@TABLO_ADI+''',''A_'+@TABLO_ADI+''''
      execute sp_executesql @SORGU
   END
END

CLOSE crstab1
DEALLOCATE crstab1

more…