Raw Sql Queries and Stored Procedure execution

Execute SQL query on existing entity

using (var context = new MyDBContext()) 
{ 
var posts = context.Posts.SqlQuery("SELECT * FROM dbo.Posts").ToList(); 
}

ToList() is mandatory here, otherwise query will not be executed, make sure you take care of sql injection attack if raw query is used

Execute Stored Procedure on existing entity

using (var context = new MyDBContext()) 
{ 
var posts = context.Posts.SqlQuery("dbo.spGetTopPosts").ToList(); 
}

 

ToList() is mandatory here, otherwise query will not be executed. Above code will execute Stored Procedure ‘spGetTopPosts’

Execute Stored Procedure with parameters on existing entity

using (var context = new MyDBContext()) 
{ 
var postID = 99; 
var posts = context.Posts.SqlQuery("dbo.spGetTopPosts @p0", postID).Single(); 
}

Single() is mandatory here, otherwise query will not be executed. Above code will execute Stored Procedure ‘spGetTopPosts’ with input paramter as postID

Execute SQL query on non-existing entity

using (var context = new MyDBContext()) 
{ 
var postTitles = context.Database.SqlQuery<string>("SELECT Title FROM dbo.Posts").ToList(); 
}

 

Execute SQL query by passing parameters

This is more better raw query as it avoid sql injections

using (var context = new MyDBContext()) 
{ 
var userSuppliedAuthor = new SqlParameter("@author", "Adi");
context.Database.SqlQuery(typeof(Post), "SELECT * FROM dbo.Posts WHERE Author = @author", userSuppliedAuthor);
}

Here the sql statement is executed on Posts table, so typeof(Post) is used. If a join statement is used on two different tables, then need to write an internal class for the returned values of sql statement.

Consider Posts, Category, Posts_Category tables exists. Posts_Category is mapping table of Posts – Id column and Category – Id column. If we want to execute sql join statement use the below code

internal class MappingData
{
public string CategoryTitle { get; set; }
public string PostTitle { get; set; }
public long? MappingId { get; set; }
}

using (var context = new MyDBContext())
{
var userSuppliedId = new SqlParameter("@PostId", PostID);
string sqlQuery = @"select c.Name CategoryTitle, pcm.Id MappingId, p.Title PostTitle from Posts_Categories pcm 
join Categories c on pcm.CategoryId = c.Id
join Posts p on pcm.PostId = p.Id where pcm.PostId =@PostId";
var Results = db.Database.SqlQuery<MappingData>(sqlQuery,userSuppliedId).ToList();
}
Results will be list of Categories of the given Post

Execute update SQL statment on non-existing entity

using (var context = new MyDBContext()) 
{ 

context.Database.ExecuteSqlCommand( 
"UPDATE dbo.Posts SET Title = 'Updated Title' WHERE PostID = 99"); 
}
For better understanding, summary extract of the method ‘SqlQuery’

 

Generate class from database table

TableName alanına tablo adını girip class üretebilirsiniz.

declare @TableName sysname = 'TableName'

declare @Result varchar(max) = 'public class ' + @TableName + '
{'

select @Result = @Result + '
public ' + ColumnType + NullableSign + ' ' + ColumnName + ' { get; set; }
'
from
(
select 
replace(col.name, ' ', '_') ColumnName,
column_id ColumnId,
case typ.name 
when 'bigint' then 'long'
when 'binary' then 'byte[]'
when 'bit' then 'bool'
when 'char' then 'string'
when 'date' then 'DateTime'
when 'datetime' then 'DateTime'
when 'datetime2' then 'DateTime'
when 'datetimeoffset' then 'DateTimeOffset'
when 'decimal' then 'decimal'
when 'float' then 'float'
when 'image' then 'byte[]'
when 'int' then 'int'
when 'money' then 'decimal'
when 'nchar' then 'string'
when 'ntext' then 'string'
when 'numeric' then 'decimal'
when 'nvarchar' then 'string'
when 'real' then 'double'
when 'smalldatetime' then 'DateTime'
when 'smallint' then 'short'
when 'smallmoney' then 'decimal'
when 'text' then 'string'
when 'time' then 'TimeSpan'
when 'timestamp' then 'DateTime'
when 'tinyint' then 'byte'
when 'uniqueidentifier' then 'Guid'
when 'varbinary' then 'byte[]'
when 'varchar' then 'string'
else 'UNKNOWN_' + typ.name
end ColumnType,
case 
when col.is_nullable = 1 and typ.name in ('bigint', 'bit', 'date', 'datetime', 'datetime2', 'datetimeoffset', 'decimal', 'float', 'int', 'money', 'numeric', 'real', 'smalldatetime', 'smallint', 'smallmoney', 'time', 'tinyint', 'uniqueidentifier') 
then '?' 
else '' 
end NullableSign
from sys.columns col
join sys.types typ on
col.system_type_id = typ.system_type_id AND col.user_type_id = typ.user_type_id
where object_id = object_id(@TableName)
) t
order by ColumnId

set @Result = @Result + '
}'

print @Result

 

C# İle Ping Atmak

Bu yazımda Csharpta herhangi web sitesinden her hangi bir bilgisayara nasıl ping atılacagını ve atıldıgını anlatmaya çalışacağım. Aslına bakarsanız bu olayı gerçekleştirmek sanıldıgı kadar zor değil, namespace’imize freamwork’un kütabanelerinden System.Net.NetworkInformation kütüphanesini eklemek bizim için yeterli olacaktır.
Namespace’imize System.Net.NetworkInformation kütüphanemizi ekledikten sonra button’umunuzun click eventine geliyoruz. Ve diyoruz ki;

protected void Button1_Click(object sender, EventArgs e)
{
Ping ping = new Ping();
PingReply DonenCevap = ping.Send(TextBox1.Text);
if (DonenCevap.Status == IPStatus.Success)
{
// server ip adresini verir.
Label1.Text += Donencevap.Address.ToString() + "<br/>";

//server cevap süresini ms cinsinden verir.
Label1.Text += Donencevap.RoundtripTime.ToString() + "<br/>";

//server ayayına başladıktan sonra geçen gün sayısını verir.
Label1.Text += Donencevap.Options.Ttl.ToString() + "<br/>";
}
else if (Donencevap.Status == IPStatus.TimedOut)
{
Label1.Text = ("Zaman Aşımına Uğradı.");
}
}

 

Bu kodlar sayesinde ping olayımızı gerçekleştirebiliyoruz. Teşekkürler bir dahaki yazımda görüşmek dileğiyle.

IL ( Intermediate Language – Aradil )

Merhabalar;

Biliyorsunuz herhangi bir VB veya C++ kodu direkt olarak makine diline çevirilirdi ve o şekilde çalıştırılırdı.Makine diline çevrilen bu programları derleyici, işlemci için özel olarak çevirirdi.

Aman Tanrım! Düşünsenize, bir programlama dilinde program yazıyorsunuz ve onu derlerken işlemcinize göre her dılde ayrı ayrı derleyip çalıştırıyor. Örneğin C++ da iki sayıyı toplayan bir programı Intel işlemcilerle Sun Sparc işlemciler için ayrı ayrı derleniyor. Ama .Net’de kodumuzu derleyip elde ettiğimiz IL kodu tamamen işlemciden bağımsız bir koddur. IL, daha genel ve taşınabilirdir. IL içinde değişken tanımları, değişkenlerin nasıl korunacağı, tanımlanan metodların nasıl çalıştırılacağı, aritmatik işlemler, mantıksal işlemler, bellek kullanımı vb daha birçok işin nasıl yapılacağı açıklanır.

http://mostarsoft.no/images/stories/products_services/microsoft_.net_logo.png

Yukarıdaki özelliklerin yanında IL’de Metadata olarak adlandırılan bir birim daha vardır. Metadata, programda kullanılan verilerin tiplerinin yanında sınıfların metodlarını ve bunların özelliklerini ve diğer bilgileri içerir.

IL hakkında bahsetmek istediklerim bu kadar. Kalın sağlıcakla!

Her yönüyle Opreratörler

C#’da operatörler 2 kısımda incelenir.

Bunlardan birincisi karşılaştırma operatörleri diğeri ise ilişkisel operatörlerdir.
Bazı kaynaklarda 3 ayrılmış (mantıksal, matematiksel,ilişkisel) şeklinde.
Bir programlama dilinde, dilin temeline inmek veya o dili oğrenmek istiyorsanız. Bunu ana kaynaktan(msdn) oğrenmeniz gerekmektedir. Fakat programlama dilleri ingilizce olduğundan dolayı, buna inerken bazı teleffuz hataları olabiliyor.
Herneyse biz once kendimiz değinelim sonra ana kaynaktan biraz inceleyelim.
Öncelikle operatörler neden var buna bir değinelim.
Operatörler,matematiksel yada mantıksal hesapların yapılması, değişik çalışma deyimlerinin hazırlanması için vardır.
2 kısımda inceliyoruz operatörleri;
Bunlardan birincisi karşılaştırma operatörleri.Karşılaştırma operatörleri ==(eşitmidir?), !=(eşit değilmidir?) olarak ifade ediliyor.

Diğer bir operatör türümüzde ilişkisel operatörler. İlişkisel operatörler ise matematikte hatırladığımız <=(kucukeşit), >=(buyukeşit), <(kucuk), >(buyuk) olarak ifade edilmektedir.
Örnek verecek olursak, 5<=4 ifadesini incelediğimizde 5’in 4’den küçük olmadığını görürüz. Ve bu ifade false bir değer üretir.
Veya 6>=6 dediğimizde 6, 6 dan buyuk değildir ama eşittir. Bu ifade ise bize true yani doğru bir değer üretir.
Matematiksel operatör dediklerimizde c# ve tüm programlama dillerinde kullandıgımız ve matematiktende hatırladığımız +(toplama), -(çıkarma), *(çarpma), /(bölme) ve son olarakta %(modulüs) operatörleridir.
Modulüs bölümden kalanı alıyor. Diğerlerini zaten biliyoruzdur.
Örnek verecek olursak, 25/3 ifadesinde modulüs operatörünü kullanırsak 25’in 3′ e bolumunden kalanı verıyor o da nedir? “1”‘dir değilmi.
-Bunlar benim kendi araştırmalarımla ulaştığım kendı bıldıklerım..

Şimdi gelelim ana kaynak(msdn) operatörler hakkında ne diyor?
Burada ise operatörle daha fazla parçalara bölerek adlandırmış.
Örneğin ;
Multiplicative operatörler olarak yani çarpımsal operatörler olarak * , / , % operatörlerini göstermiş.
Ve en güzeli de bu ..
Relational and type testing kategorisi altındada yani türkçesi (İlişkisel ve tip test) olarak ise <, >, <=, >=, is, as operatörlerini göstermiş tıpkı bizim yukarıda anlattığımız gibi. Msnd’deki tek fark operatörlerin biraz daha fazla kategorilere ayrılıp ısımlendırılmesi.
Bu makalemiz bu kadar herkese iyi çalışmalar!
Kaynak:
http://msdn.microsoft.com/en-us/libr…v=VS.100).aspx
https://www.oguzhanabali.com.tr

Overload Kavramı

Overload Kavramı

Bu Makaleyi Paylaşın|
İsimleri aynı ancak dışarıdan aldığı parametrelerin pirimitiv tipleri farklı olan iki ayrı method yada fonksiyon tanımlama işlemine Overloading denir. Bir örnek vericek olursak.

using System;
class OguzhanABALI
{
public static void Main()
{
OguzhanABALI test = new OguzhanABALI();
Console.WriteLine(test.TestMethod("İlk Methodu Çağırıyorum"));
Console.WriteLine(test.TestMethod(6));
Console.ReadLine();
}
public String TestMethod(String newMesaj)
{
String mesaj = "String deger alan Methodhodu çağırdınız =" + newMesaj;
return mesaj;
}
public String TestMethod(int sayi)
{
String mesaj = "Integer deger alan Methodhodu çağırdınız =" + sayi;
return mesaj;
}
}

 

Görüldüğü gibi iki methodun da isimleri ve return tipleri aynı olmasına rağmen dışarıdan aldığı parametre tipleri farklı olduğu için istediğimiz methodu yada fonksiyonu çağırabildik.
Bir dahaki makalemde görüşmek üzere..Herkese iyi çalışmalar!

No response while calling API in ASP.NET C# Web Forms

Asp.net webform uygulamasında async bir api call işlemi yapmaya çalışıyorsanız webformun async çalışmasını doğrulamalısınız.

Async=True
Orn: <%@ Page Title=”” Language=”C#” Async=”true” MasterPageFile=”~/Mast.. gibi

Daha sonra HttpClient ile post yaptığınız yerde ConfigureAwait(false) demelisiniz.

Orn: HttpResponseMessage response = await client.PostAsJsonAsync(“api/user”, userDTO).ConfigureAwait(false); gibi.

Solution:

HttpResponseMessage response = await client.PostAsJsonAsync("api/user", userDTO).ConfigureAwait(false);

 

Bir daha ki ipucunda görüşmek üzere, İyi çalışmalar…

ASP.Net’de Encoding ve Decoding Yapımı

Kullanım yerleri farklılık gösterebilir fakat daima işimize yarayacak bir kod bloğu. Özellikle QueryString ile veri gönderirken açık olarak parametre göndermek ciddi bir güvenlik zafiyetidir. İşte tamda bu alanda kullanmamız gereken bir özellik.

public static string Encode(this string str)
{
byte[] toEncodeAsBytes = UnicodeEncoding.Unicode.GetBytes(str); 
return Convert.ToBase64String(toEncodeAsBytes);
}
public static string Decode(this string str)
{
byte[] encodedDataAsBytes = Convert.FromBase64String(str);
return UnicodeEncoding.Unicode.GetString(encodedDataAsBytes);
}

Görüşmek üzere!

Asp.Net MVC 3 – ReCaptcha

Merhabalar arkadaşlar bu makalemizde google’ın bir hizmeti olan recaptcha uygulamasının nasıl kullanıldığını görüyor olacağız.

Kullanımı her yapıya göre farklılık göstersede aslında birbirleri arasında pek fazla fark yok. Biz makalemizde Asp.Net MVC 3 için örnek yapacağız.

1) En başta projemize Microsoft-Web-Helpers tool’unu kurmamız gerekmekte. Bunun için solution’a sağ tıklayıp “Add Package Reference” diyoruz. Daha sonra source kısmında Microsoft-Web-Helpers’i aratıp gerekli tool’a ulaşıyoruz. Install dedikten sonra projemizin reference kısmına Systems.Web.Helpers dll’ini referans olarak ekliyor. Bu işlemi yaptıktan sonra; http://www.google.com/recaptcha sayfasına girip google hesabınız ile giriş yapacaksınız. Üye olduktan sonra bir domain girmenizi isteyecek ve size 2 adet key üretecek. Bunlardan biri publicKey diğeri ise privateKey’dir. Daha sonra reCAPTCHA plugins and libraries diyerek gerekli dll dosyasını indirip reference’lerimize dahil ediyoruz.

2)Şimdi projemizin source kısmına recaptcha’i ekleyelim. Bunun için ekleyeceğimiz razor veya aspx webformumuza

@{
ReCaptcha.PublicKey = "Sizin public Keyiniz";
}
@ReCaptcha.GetHtml(theme: "red")

kodlarını ekliyoruz. Theme seçeneği olarak bizlere 4 farklı seçenek sunuyor. Ayrıca kendimizde bir theme generate edebiliyoruz. Bunlar ile ilgili geniş bilgi http://www.google.com/recaptcha nin dökümantasyon kısmında mevcut. Bu işlemi yaptıktan sonra recaptcha sayfamıza gelecektir.

3)Artık tek bir şey kaldı, kodu kontrol etmek.. Kodu kontrol etmek için ise Model’imize

if (ModelState.IsValid)
{
if (ReCaptcha.Validate("sizin privateKey’iniz"))
{
Response.Write("Güvenlik kodu doğrulandı");
}
else
{
Response.Write("Güvenlik kodunu yanlış girdiniz.");
}


}

 

Bu makaleyi ekran görüntüleriyle süslemek ve genişletmek isterdim fakat, aslına bakarsanız 2 saat once bir projemde lazım olduğu için kendim kullandım. Ve unutmamak için 10 dk içerisinde buraya karaladım. Mutlaka ama mutlaka birilerine yardımcı olacaktır 🙂 Takıldığınız yer olur ise makalenin altına yorum bırakabilirsiniz, mutlaka cevaplarım..
Hoşçakalın!

Asp.Net alert metodu ( Hayat kurtarır )

Hayat kurtaran alert metodu..

Herkese merhabalar, bu dersimizde asp.net’de en çok ama en çok sorunla karşılaştığımız alert zırvasından bahsediyor olacağız. Sürekli 4 karelik bir web sayfasında en alttaki butonda kullanıcıya mesaj bildirmek isterken hep ajaxlarla updatepanellerle boğuşuruz boğuşuruz ve boğuşuruz…
Artık ajax’a son, artık uğraşmaya son, artık alert metodumuz var 🙂
Hemen projenizde yeni bir class oluşturun alert isminde ve bu class ile bu metodu içerisine bırakıverin. Sonrasında label.text = “cansıkıcı” şeklinde mesaj vereceğinize Alert.Show(“Mesajınız”) şeklinde kullanın. Framework’teki MessageBox.Show(“Mesaj”)’den ne farkı kaldı. Bu classı bir kere projenize entegre edin sonrasında lazım olduğu yerde çağırıp kullanın. Haydi kolay gelsin..

using System.Web;
using System.Text;
using System.Web.UI;
public static class Alert
{
public static void Show(string message)
{
// Buradaki tek tırnak mesaj silmek için izin ister.
string cleanMessage = message.Replace("'", "\\'");
string script = "<script type=\"text/javascript\">alert('" + cleanMessage + "');</script>";
// Yüklenecek webformu alır.
Page page = HttpContext.Current.CurrentHandler as Page;
// Sayfa üzerinde allready olup olmadığını kontrol eder.
if (page != null && !page.ClientScript.IsClientScriptBlockRegistered("alert"))
{
page.ClientScript.RegisterClientScriptBlock(typeof(Alert), "alert", script);
}
} 
}