Özgür Özvarış

Bir yazılımcının kırık dökük dünyası

Sql Server foreign key colum query script

clock Ekim 23, 2017 17:36 by author OzgurOzvaris

Merhaba,

Kaynak : https://blog.sqlauthority.com/2006/11/01/sql-server-query-to-display-foreign-key-relationships-and-name-of-the-constraint-for-each-table-in-database/ 

Database büyüdükçe sorunlarda onunla birlikte büyüyor. Sql scriptler burada hayat kurtarıcı olabiliyor. Yeni bir tablo veya kolon eklediğinizde bir müddet sonra isim vermekten yorulsunuz ve yönetememey başlarsınız sql server'ın otomatik olarak kullandığı isimleri vermeye başlarsınız. Ancak bu seferde çok fazla relation barındıran bir tabloda hangi relation la hangi kolonları yönettiğinizi bulmak zorluk olmaya başlar.

Bu gün hangi tablolardan hangi kolonların birlikte relation bağlantı kurduğunu gösteren sorguyu paylaşacağım.

SELECT
K_Table = FK.TABLE_NAME,
FK_Column = CU.COLUMN_NAME,
PK_Table = PK.TABLE_NAME,
PK_Column = PT.COLUMN_NAME,
Constraint_Name = C.CONSTRAINT_NAME
FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS C
INNER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS FK ON C.CONSTRAINT_NAME = FK.CONSTRAINT_NAME
INNER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS PK ON C.UNIQUE_CONSTRAINT_NAME = PK.CONSTRAINT_NAME
INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE CU ON C.CONSTRAINT_NAME = CU.CONSTRAINT_NAME
INNER JOIN (
SELECT i1.TABLE_NAME, i2.COLUMN_NAME
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS i1
INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE i2 ON i1.CONSTRAINT_NAME = i2.CONSTRAINT_NAME
WHERE i1.CONSTRAINT_TYPE = 'PRIMARY KEY'
) PT ON PT.TABLE_NAME = PK.TABLE_NAME
---- optional:
ORDER BY
1,2,3,4
WHERE PK.TABLE_NAME='something'WHERE FK.TABLE_NAME='something'
WHERE PK.TABLE_NAME IN ('one_thing', 'another')
WHERE FK.TABLE_NAME IN ('one_thing', 'another')

 

İyi çalışmalar.



c# mvc ajax post - 1

clock Eylül 28, 2017 11:07 by author OzgurOzvaris

Merhaba Arkadaşlar,

c# mvc mimarinin en önemli esnekliklerinden biriside sayfayı parçalı olarak yükleyebilmenizdir. Ancak mevcut mvc yapısı çok yalın yalın bir frame work ile geldiği için partial viewların sayfanıza yerleşebilmesi yada kaydet, sil, ara gibi işlemlerin ajax ile iletilip dönen mesajların gösterilmesi gibi işlemler için kendinize ait bir javascript framework oluşturmanız gerekiyor.

Bu gün size kendi oluşturduğum frameworkten controller metodlarını çağırırken kullandığım ajaz yöntemlerden bahsedeceğim. Ne yazıkkı çalışmamız tam bir eğitim olmadığı ve temelden tepeye doğru yükselmediği için biraz tepeden dalma olacak. Ama anlamaya çalışırsanız sizede faydalı olacağını düşünüyorum.

1. Controller metodu ajax ile çağırma senaryosu ayrı ayrı value parametrelerle ile çağırmak

//View javascript:  

var data = { param1: val1, param2: val2, param3: val3}

ajaxMethod(url, data);

//c# controller:
public ActionResult Controllermethod(int param1, int param2, int param3)

2. Controller metodu ajax ile çağırma senaryosu metodu class array parametresi ile çağırmak 

//View javascript: 

var classParameter= new Array();

classParameter.push({ param1: val1, param2: val2, paramn: valn });
...
classParameter.push({ param1: val1, param2: val2, paramn: valn });

ajaxMethod(url, $.postify(classParameter, "classParameter")) 

//c# controller: 

public IEnumerable<ClassType> classParameter

public ActionResult ControllerMetod(IEnumerable<ClassType> classParameter)

 3. Controller metodu ajax ile çağırma senaryosu - metodu serilized form input html elemets class parametresi ile çağırmak 

Burada kullanılan postify metodu serialize edilmiş dizinin sonuna yeni bir class eklemenizi sağlıyor.

Kaynak : Posting Array and Form Data to Controller - MVC Ajax

//View Javascript

var frm = $("#Form1 :input");

var ExtraData = {

    param1: val1,

    param2: val2,

    param2: val3,

}

var data= frm.serializeObject($.postify(ExtraData, "ExtraData"));

ajaxMethod(url, data);

//c# controller

public class FormData
    {
        public int? inputElement1{ get; set; }
        public string inputElement2{ get; set; }
        public string inputElement3{ get; set; }
        ...
        public DateTime? inputElement4 { get; set; }
        public bool? inputElement5 { get; set; }
        public int? inputElement6 { get; set; }


        public ExtraData ExtraData { get; set; }
    }


    public class ExtraData
    {
        public bool param1 { get; set; }
        public string param2 { get; set; }
        ...
        public ICollection<ClassType> param3{ get; set; }
    }

public ActionResult ControllerMetod(FormData classParameter)

4. Controller metodu ajax ile çağırma senaryosu - ajax dataya direk ilaveler yapmak

Daha sonradan serilized edilmiş form datasının bir dizi olduğunu düşünerek postify kullanmadan direk olarak diziye eleman ekleyerek yeni propertiler oluşturdum.

Not : Bu şekilde tekil int,string vs gibi değerleri ekleyebilirsiniz.

//View Javascript

var frm = $("#Form1 :input");

var $data = frm.serializeObject();

$data ['Param1'] = val1;
$data ['Param2'] = val3;


ajaxMethod(url, $data);

//c# controller

public class FormData
    {
        public int? inputElement1{ get; set; }
        public string inputElement2{ get; set; }
        public string inputElement3{ get; set; }
        ...
        public DateTime? inputElement4 { get; set; }
        public bool? inputElement5 { get; set; }
        public int? inputElement6 { get; set; }


        public string Param1{ get; set; }
        public int Param2{ get; set; }

    }

public ActionResult ControllerMetod(FormData classParameter)

İyi çalışmalar.

 

 



Json sourced dinamik anket formu surveyjs

clock Ağustos 9, 2017 11:58 by author OzgurOzvaris

Merhaba,

Kaynak :

http://surveyjs.org/ 

Uygulamamızda bir anket formu yapmamız gerekti. Bizde acaba yeni teknolojileri kullanarak bu anket formunu browserda dinamik oluşturabilimiyiz diyerek angular gibi teknolojileri karıştırıken birden karşıma surveyjs çıktı.

Gayet başarılı bir uygulama. Kendi designer'ını kullanarak web üzerinde statik anket tasararlayabiliyorsunuz. Ayrıca isterseniz tasarladığınız anketleri ona ait olan cloud üzerinde biriktirebiliyorsunuz. Anket tamamlama butonunu tıkladığınızda sonuçları yine oncomplete eventin de kendi servislerini anket sonucunda oluşan json verisi ile çağırabiliyor ve verileri basit te olsa bir havuzda biriktirebiliyorsunuz. Ayrıca localizasyonu seçeniği ile custom çoklu dil desteği de sağlıyor.

Çok hacimli olmasada gayet güncel teknolojileri ve yöntemleri kullanarak güzel bir çalışma olmuş.

En güzelide eğer developer iseniz javascript kütüphanesini veriyor ve kendiniz server tarafında kendi db yapınıza göre surveyjs in istediği tarda bir json oluşturarak anketleriniz tasarlayabiliyorsunuz.

Bir fikir vermesi açısından size kendim için db'den derleyerek oluşturduğum json dizi ile oluşturulmuş anket örneğini jsfiddle.net e kaydettim paylaşıyorum.

https://jsfiddle.net/prog2011/0v9sv881/1/

İyi çalışmalar.

 



css class value reset

clock Ağustos 9, 2017 11:27 by author OzgurOzvaris

Merhaba,

Kaynak :

Reset/remove CSS styles for element only

Bir html nesne ile ilgili örneğin "span" tagı ile ilgili header kısmınızda projede genel  kullanılacak şekilde genel bir css dostayı tanımladığınızı varsayalım.

Daha sonra bu span için farzedelim ki bootstrap tarzı bir css framework içinde görselde sorun yaşadığınızda bu span'ın sizin tanımladığınız önceki özelliklerini silmeniz gerekir.

Çünkü bootstrap span'a class üzerinden değerleri atamıyor. h1,h2,h3 gibi taglara değer atıyor. Bu nedenle sizin master css nin valuları orada görseli bozacaktır.

Bu durumda istediğini tag'ın değerlerini reset etmek için şu paylaştığım "reset-class" css clasını kullanabilirsiniz.

.reset-this {
    animation : none;
    animation-delay : 0;
    animation-direction : normal;
    animation-duration : 0;
    animation-fill-mode : none;
    animation-iteration-count : 1;
    animation-name : none;
    animation-play-state : running;
    animation-timing-function : ease;
    backface-visibility : visible;
    background : 0;
    background-attachment : scroll;
    background-clip : border-box;
    background-color : transparent;
    background-image : none;
    background-origin : padding-box;
    background-position : 0 0;
    background-position-x : 0;
    background-position-y : 0;
    background-repeat : repeat;
    background-size : auto auto;
    border : 0;
    border-style : none;
    border-width : medium;
    border-color : inherit;
    border-bottom : 0;
    border-bottom-color : inherit;
    border-bottom-left-radius : 0;
    border-bottom-right-radius : 0;
    border-bottom-style : none;
    border-bottom-width : medium;
    border-collapse : separate;
    border-image : none;
    border-left : 0;
    border-left-color : inherit;
    border-left-style : none;
    border-left-width : medium;
    border-radius : 0;
    border-right : 0;
    border-right-color : inherit;
    border-right-style : none;
    border-right-width : medium;
    border-spacing : 0;
    border-top : 0;
    border-top-color : inherit;
    border-top-left-radius : 0;
    border-top-right-radius : 0;
    border-top-style : none;
    border-top-width : medium;
    bottom : auto;
    box-shadow : none;
    box-sizing : content-box;
    caption-side : top;
    clear : none;
    clip : auto;
    color : inherit;
    columns : auto;
    column-count : auto;
    column-fill : balance;
    column-gap : normal;
    column-rule : medium none currentColor;
    column-rule-color : currentColor;
    column-rule-style : none;
    column-rule-width : none;
    column-span : 1;
    column-width : auto;
    content : normal;
    counter-increment : none;
    counter-reset : none;
    cursor : auto;
    direction : ltr;
    display : inline;
    empty-cells : show;
    float : none;
    font : normal;
    font-family : inherit;
    font-size : medium;
    font-style : normal;
    font-variant : normal;
    font-weight : normal;
    height : auto;
    hyphens : none;
    left : auto;
    letter-spacing : normal;
    line-height : normal;
    list-style : none;
    list-style-image : none;
    list-style-position : outside;
    list-style-type : disc;
    margin : 0;
    margin-bottom : 0;
    margin-left : 0;
    margin-right : 0;
    margin-top : 0;
    max-height : none;
    max-width : none;
    min-height : 0;
    min-width : 0;
    opacity : 1;
    orphans : 0;
    outline : 0;
    outline-color : invert;
    outline-style : none;
    outline-width : medium;
    overflow : visible;
    overflow-x : visible;
    overflow-y : visible;
    padding : 0;
    padding-bottom : 0;
    padding-left : 0;
    padding-right : 0;
    padding-top : 0;
    page-break-after : auto;
    page-break-before : auto;
    page-break-inside : auto;
    perspective : none;
    perspective-origin : 50% 50%;
    position : static;
    /* May need to alter quotes for different locales (e.g fr) */
    quotes : '\201C' '\201D' '\2018' '\2019';
    right : auto;
    tab-size : 8;
    table-layout : auto;
    text-align : inherit;
    text-align-last : auto;
    text-decoration : none;
    text-decoration-color : inherit;
    text-decoration-line : none;
    text-decoration-style : solid;
    text-indent : 0;
    text-shadow : none;
    text-transform : none;
    top : auto;
    transform : none;
    transform-style : flat;
    transition : none;
    transition-delay : 0s;
    transition-duration : 0s;
    transition-property : none;
    transition-timing-function : ease;
    unicode-bidi : normal;
    vertical-align : baseline;
    visibility : visible;
    white-space : normal;
    widows : 0;
    width : auto;
    word-spacing : normal;
    z-index : auto;
    /* basic modern patch */
    all: initial;
    all: unset;
}

/* basic modern patch */

#reset-this-root {
    all: initial;
    * {
        all: unset;
    }
}

 

java scriptinizde de şimdi paylaşacağım basit bir jquery ile bu span taglarındaki kirli veriyi temizleyebilirsiniz. Tabi bu jquery'i document.ready bloğuna koymayı unutmayın. Aksi taktirde daha nesne derlenmediği için hiç bir iş yapmayacaktır.

$( "span" ).addClass( "reset-this" );

 

İyi çalışmalar.



Json Dictionary Arrays Deserialize

clock Ağustos 8, 2017 17:25 by author OzgurOzvaris

Merhaba ,

Kaynak : 

https://stackoverflow.com/questions/1207731/how-can-i-deserialize-json-to-a-simple-dictionarystring-string-in-asp-net 

https://www.w3schools.com/js/js_json_arrays.asp 

http://www.newtonsoft.com/json/help/html/SerializingCollections.htm 

Eğer json diziniz bir class şeklinde değilde şimdi paylaşacağım şekilde dinamik olarak oluşan bir ekrandaki nesneleri toplayarak post edeceği değeri oluşturan bir text,value şeklindeki dictionaryden oluşsaydı nasıl olacaktı ve biz bunu nasıl deserialize edecektik.

{ "key1": "value1", "key2": "value2"}

Öncelikle biraz json dizilerinden bahsetmek isityorum.

[ "Ford", "BMW", "Fiat" ]

Bu bir string array. Tek boyutlu stringlerin içine n tane konulabileceği bir array

{
"name":"John",
"age":30,
"cars":[ "Ford", "BMW", "Fiat" ]
}

Bu da name,age, cars isimli üç property si olan bir class. Burada cars yukarıda ki örnekte görüldüğü üzere bir string array. Dizi "[]" içinde olmasına karşın, class "{}" küme parantezi içerisinde tanımlanıyor.

Fakat başta bahsettiğim gibi dictionary yapısı biraz daha sadece ve farklı bir notasyona sahip önce json notasyonun dictionary şeklinde doğru kurgulanması gerekiyor.

Daha sonra burada uyguladığım deserilizasyon işleminde http://www.newtonsoft.com kütüphanesini yöntemini kullandım gayette başarılı bir şekilde çevirdi..

Kullandığım kod satırı

string json = @"{""key1"":""value1"",""key2"":""value2""}";

Dictionary<string, string> values = JsonConvert.DeserializeObject<Dictionary<string, string>>(json);

 

Herkese iyi çalışmalar.



sp_change_users_login

clock Şubat 27, 2017 13:51 by author OzgurOzvaris

Bir database backup dosyanız üzerinde bazı kullanıcılar var ve bunları yeni bir mssql server'a aynı isimli başka bir database'e restore etmek isterseniz bu sp_change_users_login stored procedunun çok önemli olduğunu görüceksiniz.

MSSQL sunucunuza aynı kullanıcıyı ekleseniz dahi yeni açtığınız kullanıcının SID si farklı olduğu için database kullanıcınız ve Server kullanıcınız arasında uyumsuzluk olacaktır.

Belki ileride MSSQL bu sorunu halleder....

Ama şimdilik bu sorunu halledebilmek için 

use testDB

exec

sp_change_users_login 'update_one', 'testDBuser', 'testDBuser'

storedprocedurünü kullanmanız gerekmektedir. Bu komuttan sonra database kullanıcısı ve server kullanıcısı arasındaki SID eşitlenmiş olur.

İyi çalışmalar.



MSSQL Bir kolon var mı, varsa değeri ne sorgusu

clock Ocak 29, 2017 00:15 by author OzgurOzvaris

Merhaba Arkadaşlar,

Sistem tabloları üzerinden sorgu yazıp, dinamik bir sogu çalıştırıp bunu cursor vasıtası ile bir temp tabloya doldurup bu aradağımız kolonun değerini alacağız. Bu sorguyu kendim multi language tabloların db deki tablo id lerini almak için kullanıyorum.

DECLARE @name VARCHAR(50) -- database name  
DECLARE @sqlCommand varchar(1000)
--database deki bütün tabloların listesini cursor a ekle
DECLARE db_cursor CURSOR FOR  
SELECT name 
FROM sys.tables tabels 

CREATE TABLE #tmpTable
(
    TBL_ID int,
    Name varchar(50)
    
)

OPEN db_cursor   
FETCH NEXT FROM db_cursor INTO @name   

WHILE @@FETCH_STATUS = 0   
BEGIN   
-- TBL_ID kolonu var ise temp tabloya ekle...
       IF EXISTS(
			SELECT *
			FROM sys.columns 
			WHERE Name      = N'TBL_ID'
			  AND Object_ID = Object_ID(@name) 
			  AND Object_ID <>  Object_ID(N'FSYS_DICTIONARY'))
		BEGIN
			-- Column Exists
			--PRINT @name
			SET @sqlCommand = 'insert into #tmpTable Select TOP 1 TBL_ID, ''' + @name + ''' FROM ' + @name 
			--PRINT @sqlCommand
			EXEC (@sqlCommand)
			
		END


       FETCH NEXT FROM db_cursor INTO @name   
END

SELECT * FROM  #tmpTable  Order By TBL_ID Desc

DROP TABLE #tmpTable
CLOSE db_cursor   
DEALLOCATE db_cursor

İyi çalışmalar

 



MSSQL Basit Cursor

clock Ocak 28, 2017 23:47 by author OzgurOzvaris

Merhaba,

Kaynak : sql-server-cursor-example 

Ara ara sql serverda faydalı olacak scripler girmeye devam ediyorum. Bu gün ki script basit bir cursor oluşturup içinde while döngüsü ile dönmek.

DECLARE @name VARCHAR(50) -- database name  
DECLARE @path VARCHAR(256) -- path for backup files  
DECLARE @fileName VARCHAR(256) -- filename for backup  
DECLARE @fileDate VARCHAR(20) -- used for file name 

SET @path = 'C:\Backup\'  

SELECT @fileDate = CONVERT(VARCHAR(20),GETDATE(),112) 

DECLARE db_cursor CURSOR FOR  
SELECT name 
FROM MASTER.dbo.sysdatabases 
WHERE name NOT IN ('master','model','msdb','tempdb')  

OPEN db_cursor   
FETCH NEXT FROM db_cursor INTO @name   

WHILE @@FETCH_STATUS = 0   
BEGIN   
       SET @fileName = @path + @name + '_' + @fileDate + '.BAK'  
       BACKUP DATABASE @name TO DISK = @fileName  

       FETCH NEXT FROM db_cursor INTO @name   
END   

CLOSE db_cursor   
DEALLOCATE db_cursor

Örnektre mssql altındaki tüm dblerin backuplarını alan bir script oluşturuyor.

İlginizi çekebilir Basit Cursor 2 .

İyi çalışmalar.

 

 



c# ajax json post

clock Ocak 7, 2017 18:00 by author OzgurOzvaris

Merhaba,

Kaynak : How do I build a JSON object to send to an AJAX WebService

Eğer bir c# mvc metodunu json data göndermek isterseniz aşağıda paylaştığım örmek faydalı olacaktır.

public Response ValidateAddress(Request request1, Request myRequest2)
data: {request1:$.toJSON(myData1), myRequest2:$.toJSON(myData2)}

Yada

data: {request1:JSON.stringify(myData1), myRequest2:JSON.stringify(myData2)}

İyi çalışmalar.

 



filezilla multiple shared folder

clock Ocak 6, 2017 14:23 by author OzgurOzvaris

Merhaba,

File zillada birden fazla kılasörü tek home directoryde paylaşmak istediğinizde diğer klasörlere bir alias tanımlamalısınız.

Users ekranında aşağıda gözüktüğü gibi bir alias tanımlayabilirsiniz.

 

 

 

 

 

İyi çalışmalar.



Hakkımızda  AboneOl 

Blog Yayınımıza Hoşgeldiniz.

Month List

RecentPosts

Sign In