Code-First ile Üretilmiş Migration’ların SQL Çıktısının Üretilmesi

Okuma Süresi: 1 dakika

Entity Framework Code-First yöntemi kullanılarak geliştirilmiş uygulamalarda add-migration ve update-database komutlarını Package Manager Console üzerinden çalıştırdığımızda uygulamamızın kullanmış olduğu Connection String üzerinden değişiklikleri veritabanına uygulayabiliyoruz.

Ancak üretilen bu migrationları veritabanında herhangi bir değişiklik yapmadan SQL çıktısı olarak alabilmek için aşağıdaki komutu kullanabiliriz.

Update-Database -Script -SourceMigration:0

Bu komut sayesinde yapmış olduğumuz tüm migrationların SQL çıktısı ekrana gelecektir.

ASP.NET’te Page_Load Olayının Master Page’deki Page_Load Olayından Önce Tetiklenmesi

Okuma Süresi: 1 dakika

ASP.NET’te bazı durumlarda sayfa yüklemeden önce bazı işlemlerin yapılması gerekebilir. Örneğin kullanıcı doğrulaması gibi.

Bu gibi durumlarda hem sayfalarda hem de Master Page’lerde Page_Load olayı kullanılır. Ancak bu olayda sayfanın içeriği oluşturulmaktadır. Sayfanın içeriği oluşturulmadan önce bu kontrolleri yapabilmemiz için Page_Init ve Page_PreRender olayları kullanılır.

Master Page dosyalarımızda Page_Init, normal sayfalarımızda ise Page_PreRender olayı kullanılır. Örnek kullanımları aşağıdaki gibidir:

Master Page


protected void Page_Init(object sender, EventArgs e) { /*Olay gövdesi */ }

 

Sayfalar


protected void Page_PreRender(object sender, EventArgs e) { /*Olay gövdesi*/ }

ASP.NET 4’ün IIS’e Register Edilmesi

Okuma Süresi: 1 dakika

Web sunucuya yüklemiş olduğunuz bir ASP.NET 4.0 uygulamasını çalıştırdığımızda HTTP Error 500.21 – Internal Server Error – Handler “PageHandlerFactory-Integrated” has a bad module “ManagedPipelineHandler” in its module list” şeklinde bir hata alırsanız ASP.NET, IIS’e register edilmemiştir.

HTTP Error 500.21 - Internal Server Error

Bu sorunu düzeltmek için Komut İstemi’nden (Command Prompt) aşağıdaki komutu çalıştırmanız yeterlidir.

%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_regiis.exe -i

Bu komutu çalıştırdığınız zaman ASP.NET başarıyla IIS’e register edilmiş olacaktır.

SQL Server’da Komutların Çalışmasını Belli Bir Süre Bekletme

Okuma Süresi: 1 dakika

SQL Server’da çalıştırdığımız komutları belli bir süre bekletip tekrar çalıştırabilme olanağımız vardır. Bazı programlamla dillerinde bulunan Delay veya Thread.Sleep metodlarının aynısını SQL Server üzerinde de kullanabiliriz. WAITFOR DELAY komutu bu işlemi gerçekleştirmektedir.

Kullanımı aşağıdaki şekildedir:

-- 5 dakika bekletir.

WAITFOR DELAY '00:05';

-- 5 saniye bekletir.

WAITFOR DELAY '00:00:05';

-- 5 saat bekletir.

WAITFOR DELAY '05:00:00';

Apache’de Dizin Listelemeyi Pasif Yapma

Okuma Süresi: 1 dakika

Apache’nin önceki sürümlerinde Dizin Listeleme’yi (Directory Listing) devre dışı bırakmak için httpd.conf dosyasında bazı değişiklikler yapmak gerekliydi. Ancak Ubuntu üzerinde Apache2 kullanıyorsanız bu dosyayı düzenlemenize gerek kalmamaktadır. Terminal üzerinden aşağıdaki kodu yazıp çalıştırdığınızda dizin listeleme pasif olacaktır.

sudo a2dismod autoindex

Terminal’de kodu çalıştırdığınızda sadece apache2 servisini yeniden başlattığınızda dizin listeleme pasif olacaktır.

sudo service apache2 restart

Dizin listelemeyi tekrar aktif hale getirmek için aşağıdaki kodu kullanmanız yeterlidir.

sudo a2enmod autoindex


Web Servislerinde Session Kullanımı

Okuma Süresi: 1 dakika

Bir ASP.NET uygulamasında web servisiniz içerisinden Session’a erişmek istediğiniz zaman “Object reference not set to an instance of an object” hatasını alacaksınızdır.

Örnek olarak aşağıdaki gibi bir servis metodumuz olsun.

        [WebMethod]
        public string SayHello()
        {
            if(HttpContext.Current.Session["message"] != null)
               return HttpContext.Current.Session["message"];
            return "";
        }

Uygulamamızın herhangi bir yerinde message isminde bir Session’ın oluşturulduğunu varsayalım. null kontrolü yapmamıza rağmen if bloğunun başında “Object reference not set to an instance of an object” hatasını fırlatacaktır. HttpContext null olmamasına rağmen HttpContext’in Session özelliği null olarak gelmektedir.

Sorunu çözebilmek için WebMethod niteliğimizin (attribute) EnableSession özelliğini true olarak ayarlamamız gerekmektedir.

        [WebMethod(EnableSession = true)]
        public string SayHello()
        {
            if(HttpContext.Current.Session["message"] != null)
               return HttpContext.Current.Session["message"];
            return "";
        }

Kodumuzu bu şekilde düzenleyip çalıştırdığımızda sorunsuz bir şekilde çalışacaktır.

TinyMCE ile Formatter Kullanımı

Okuma Süresi: 1 dakika

TinyMCE’de Formatter basit bir şekilde istediğimiz biçimleri uygulamamızı veya kaldırmamıza yarar.

Örnek olarak TinyMCE editöründe seçmiş olduğumuz alanı ins veya del etiketleri arasına alacak ve kaldır düğmesine bastığımızda ise bu biçimleri kaldıracak.

Varsayılan olarak gelen init fonksiyonumuzu aşağıdaki şekilde değiştirelim:

tinymce.init({
    selector: "textarea",
    plugins: [
        "advlist autolink lists link image charmap print preview anchor",
        "searchreplace visualblocks code fullscreen",
        "insertdatetime media table contextmenu paste"
    ],
    toolbar: "insertfile undo redo | styleselect | bold italic | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | link image",
    formats: {
         removed: { inline: 'del', 'classes': 'deleted' },
         added: { inline: 'ins', 'classes': 'inserted' }
       }
});

formats özelliğinde istediğimiz kadar yeni biçimler ekleyebiliriz. Bu örnekte removed ve added isminde biçimler ekledik. inline değeri ile hangi elementi kullanarak biçimlendireceğini, classes özelliği ile de elemente class vermiş olduk.

Editörde seçili olan alana bu biçimleri uygulayabilmek veya kaldırabilmek için apply ve remove fonksiyonları kullanılır. apply fonksiyonu seçili alana biçimi uygular, remove fonksiyonu ise seçili alanda uygulanmış bir biçim var ise bu biçimi kaldırır. Her iki fonksiyonda tek bir parametre almaktadır. Parametre olarak formats alanında tanımlamış olduğunuz ismi vermeniz yeterlidir.

Örnek ekran görüntüsü aşağıdaki gibidir.
TinyMCE FormatterYazmış olduğumuz tüm kod aşağıdaki gibidir.

<script type="text/javascript">
tinymce.init({
    selector: "textarea",
    plugins: [
        "advlist autolink lists link image charmap print preview anchor",
        "searchreplace visualblocks code fullscreen",
        "insertdatetime media table contextmenu paste"
    ],
    toolbar: "insertfile undo redo | styleselect | bold italic | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | link image",
    formats: {
        removed: { inline: 'del', 'classes': 'deleted' },
        added: { inline: 'ins', 'classes': 'inserted' }
    }
});
</script>

<form method="post" action="dump.php">
    <textarea name="content"></textarea>
</form>
<a href="#" class="add" onclick="tinymce.activeEditor.formatter.apply('added');return false;">ekle</a>
<a href="#" class="remove" onclick="tinymce.activeEditor.formatter.apply('removed');return false;">sil</a>

TinyMCE’nin formatter hakkında daha detaylı bilmek almak ve fonksiyon listesine gitmek için buraya tıklayabilirsiniz.

Yazdığımız kodların bulunduğu örnek sayfaya gitmek için buraya tıklayabilirsiniz.

Regular Expressions’da Türkçe Karakter Problemi

Okuma Süresi: 1 dakika

Bir projede Regular Expressions ile geçen metinleri \w pattern’ı ile almaya çalışmıştım. Ancak \w pattern’ı Türkçe karakterleri seçmemekteydi. İnternette yaptığım kısa bir araştırmada aşağıdaki pattern’ı buldum ve test ettiğimde metindeki tüm karakterleri seçebildiğini gördüm.

^\p{L}+$

Bu pattern’la rahatlıkla tüm karakterleri seçebilirsiniz.

SQL Server’da Tüm Kolonların Collation’ını Değiştirme

Okuma Süresi: 1 dakika

SQL Server üzerinde veritabanının Collation’ını değiştirdiğiniz zaman Collation kolonlarda değişmeyebilir. SQL Server Management Studio’da tablo düzenlemesinden değiştirmek istediğinizde eğer tablo üzerinde veri varsa hata mesajıyla karşılaşacaksınız. Aşağıda bulunan T-SQL sorgusu veritabanındaki tüm tabloların tüm kolonlarının Collation’larını değiştirmektedir.

DECLARE @collate nvarchar(100);
DECLARE @table nvarchar(255);
DECLARE @column_name nvarchar(255);
DECLARE @column_id int;
DECLARE @data_type nvarchar(255);
DECLARE @max_length int;
DECLARE @row_id int;
DECLARE @sql nvarchar(max);
DECLARE @sql_column nvarchar(max);

SET @collate = 'Turkish_CI_AI';

DECLARE local_table_cursor CURSOR FOR

SELECT [name]
FROM sysobjects
WHERE OBJECTPROPERTY(id, N'IsUserTable') = 1

OPEN local_table_cursor
FETCH NEXT FROM local_table_cursor
INTO @table

WHILE @@FETCH_STATUS = 0
BEGIN

DECLARE local_change_cursor CURSOR FOR

SELECT ROW_NUMBER() OVER (ORDER BY c.column_id) AS row_id
, c.name column_name
, t.Name data_type
, c.max_length
, c.column_id
FROM sys.columns c
JOIN sys.types t ON c.system_type_id = t.system_type_id
LEFT OUTER JOIN sys.index_columns ic ON ic.object_id = c.object_id AND ic.column_id = c.column_id
LEFT OUTER JOIN sys.indexes i ON ic.object_id = i.object_id AND ic.index_id = i.index_id
WHERE c.object_id = OBJECT_ID(@table)
ORDER BY c.column_id

OPEN local_change_cursor
FETCH NEXT FROM local_change_cursor
INTO @row_id, @column_name, @data_type, @max_length, @column_id

WHILE @@FETCH_STATUS = 0
BEGIN

IF (@max_length = -1) SET @max_length = 4000;

IF (@data_type LIKE '%char%')
BEGIN TRY
SET @sql = 'ALTER TABLE ' + @table + ' ALTER COLUMN ' + @column_name + ' ' + @data_type + '(' + CAST(@max_length AS nvarchar(100)) + ') COLLATE ' + @collate
PRINT @sql
EXEC sp_executesql @sql
END TRY
BEGIN CATCH
PRINT 'ERROR: Some index or contraint rely on the column' + @column_name + '. No conversion possible.'
PRINT @sql
END CATCH

FETCH NEXT FROM local_change_cursor
INTO @row_id, @column_name, @data_type, @max_length, @column_id

END

CLOSE local_change_cursor
DEALLOCATE local_change_cursor

FETCH NEXT FROM local_table_cursor
INTO @table

END

CLOSE local_table_cursor
DEALLOCATE local_table_cursor

GO

@collate değişkenine kullanmak istediğiniz Collation değeriyle değiştirmeniz yeterlidir.

SQL Server’ın desteklediği Collation’ları listelemek için aşağıdaki T-SQL sorgusunu çalıştırmanız yeterlidir.

SELECT name, COLLATIONPROPERTY(name, 'CodePage') as Code_Page, description
FROM sys.fn_HelpCollations()

TinyMCE Character Encoding

Okuma Süresi: 1 dakika

TinyMCE editöründe varsayılan olarak girilen metinler &nbsp; gibi encode edilerek kaydedilir. Bu ayarı değiştirmek için init fonksiyonunda entity_encoding değerini değiştirmeniz gerekmektedir.

tinymce.init({
        ...
        entity_encoding : "raw"
});

entity_encoding özelliği 3 adet değer almaktadır. Bunlar named, numeric ve raw‘dır.

named değeriyle girilen karakterler otomatik olarak &nbsp; gibi HTML olarak encode edilmektedir.

numeric değeriyle girilen karakterler otomatik olarak &#160; gibi encode edilmektedir.

raw değeriyle ise girilen karakterler olduğu biçimde kaydedilmektedir.

 

Bu konu hakkında daha detaylı bilgi almak için aşağıdaki sayfayı ziyaret edebilirsiniz:

http://www.tinymce.com/wiki.php/Configuration:entity_encoding