Kayıtlar

Base64 - Image Dönüşümleri

//Image'ı Base64 formatına çevirmek için System.Drawing.Image img = System.Drawing.Image.FromFile(@"c:\pict1.jpg"); System.IO.MemoryStream ms = new System.IO.MemoryStream(); img.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg); string b64 = Convert.ToBase64String(ms.ToArray()); img.Dispose(); ms.Close(); // Base64'den Image'ı elde etmek için byte[] b; b = Convert.FromBase64String(b64); ms = new System.IO.MemoryStream(b); img = System.Drawing.Image.FromStream(ms); img.Save(@"c:\pict1_from_b64.jpg", System.Drawing.Imaging.ImageFormat.Jpeg); img.Dispose(); ms.Close(); ref : http://forums.asp.net/t/896621.aspx

XML'e serialize edilebilen Generic Dictionary

IDictionary interface'ini kullanan Dictionary,Hashtable gibi class'lardan oluşturduğunuz instance'ları xml'e serialize ettiğinizde malesef sorunlar çıkıyo. Bunun için güzel bir çözüm yazılmış. using System; using System.Collections.Generic; using System.Text; using System.Xml.Serialization; [XmlRoot("dictionary")] public class SerializableDictionary : Dictionary , IXmlSerializable { #region IXmlSerializable Members public System.Xml.Schema.XmlSchema GetSchema() { return null; } public void ReadXml(System.Xml.XmlReader reader) { XmlSerializer keySerializer = new XmlSerializer(typeof(TKey)); XmlSerializer valueSerializer = new XmlSerializer(typeof(TValue)); bool wasEmpty = reader.IsEmptyElement; reader.Read(); if (wasEmpty) return; while (reader.NodeType != System.Xml.XmlNodeType.EndElement) { reader.ReadStartElement("item"); reader.ReadStartElement("key"); TKey key = (TKey)keySerializer.Deserialize(reader); reader.ReadEndElement(); reader.R...

The Controls property of UpdatePanel with ID '...' cannot be modified directly....

Eğer projenizde update panel'i runtime'da eklemiş vede bu panel'e runtime'da kontrol eklemeye çalıştığınızda The Controls property of UpdatePanel with ID '...' cannot be modified directly. To change the contents of the UpdatePanel modify the child controls of the ContentTemplateContainer property. hatası alıyorsanız bunun anlamı update panel'in controls classına direk bir control eklemeye çalışmanızdır. Dim upd As UpdatePanel = New UpdatePanel Dim txt As TextBox = New TextBox upd.Controls.Add(txt) gibi ... Bu hatadan kurtulmanız için yapmanız gereken şeyse Dim upd As UpdatePanel = New UpdatePanel Dim txt As TextBox = New TextBox upd.ContentTemplateContainer.Controls.Add(txt) şeklinde update panel'in ContentTemplateContainer'ının control class'ına ekleme yapmak. Ref : http://foros.dotnetclubs.com/forums/thread/1401.aspx

A potentially dangerous Request.Form value was detected from the client

"A potentially dangerous Request.Form value was detected from the client" hatası .NET Framework 1.1 ile gelen ve .NET Framework 2.0 da da bulunan "Request Validation" özelliğinden kaynaklanmaktadır. Kullanımındaki amaç script kodları yada html kodları aracılığıyla yapılabilecek script injection'larına engel olmaktır. Mesela bir textbox'ın içersinde " " işaretleri yerleştirecek olursanız form submit edildiği an hata ile karılaşırsınız. Ancak bazı durumlarda kullanıcının bunu yapmasına müsade etmemiz gerekebilir. Bu sorunu çözmenin 2 yolu var 1) web.config de Request Validation'ı disable etmek (tüm uygulama için geçerli olacaktır) <pages validateRequest="false" /> 2) Bu sorunu çözmek istediğiniz sayfa için @Page yönergesine validateRequest=false yazmak. Ref http://kb.seekdotnet.com/ViewArticle/42data.aspx

Herhangi bir tablonun kolonlarının bilgileri

Select Name,IsPrimaryKey=Case when Name= col_name(sysindexkeys.id,sysindexkeys.colid) then 1 else 0 end, Data_type as DataType,CHARACTER_MAXIMUM_LENGTH as Length,colstat as IsIdentity, IsNullable,object_Name(rkeyid) RelationTable,col_name(rkeyid,rkey) RelationColumn from syscolumns inner join INFORMATION_SCHEMA.COLUMNS on INFORMATION_SCHEMA.COLUMNS.COLUMN_NAME=Name left join sysforeignkeys on syscolumns.id =sysforeignkeys.fkeyid and Name = col_name(fkeyid,fkey) left join sysindexkeys on syscolumns.id = sysindexkeys.id where syscolumns.id=Object_ID('Tablo_Adi')

Sys.Debug is null or not an object

Eğer projenizde ajaxtoolkit in yeni versiyonunu kullandıktan sonra kendi makinenizde yada bir başka makineye publish ettiğinizde Sys.Debug is null or not an object hatası alıyorsanız yapmanız gereken ajax'ın yeni sürümünü kurmak. Ve sonrasında aspnet_regiis -i sorunu halledecektir. Ancak kurulumdan önce eski versiyonu kaldırdığınızda her ihtimale karşılık Program files altındaki ASP.NET 2.0 AJAX Extensions klasörünü silmeyi ihmal etmeyin . Aslına bakarsanız sorun bu klasörün uninstall'dan sonra içersidneki dosyaların bazılarının halen yerinde kalmasından kaynaklanıyor.

Ajax Calendar'da 'Date.parseLocale is not a function' hatası

Eğer ajaxtoolkit'teki yeni kontrollerden birisi olan Calendar nesnesini kullanmış vede 'Date.parseLocale is not a function' hatası alıyorsanız yapmanız gereken ajax'ın sessiz sedasız çıkmış olan yeni sürümünü kurmak. ASP.NET AJAX 1.0 Ve vazgeçilmez aspnet_regiis -i sorunu halledecektir. Ref : http://forums.asp.net/thread/1553150.aspx

'Sys' is undefined - AJAX Extensions 1.0

Ajax Enabled bir uygulamayı windows 2000 Server olan bir bilgisayarda host ettimde aşağıdaki hata ile karşılaştım. 'Sys' is undefined Hatanın çözümü için yapılabilecek bir kaç şey var. web.config'de httpHandlers nodunun bulunduğuna ve altında "ScriptResource.axd" nin aşağıdaki gibi tanımlandığına emin olun. ( httpHandlers system.web nodu içersinde bulunmalı ) <httphandlers> <add validate="false" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" path="ScriptResource.axd" verb="GET,HEAD"> </httphandlers> Eğer yukardaki düzenlemeyi yaptığınız halde sorun halen giderilmemişse bu durumda windows update'lerininden kaynaklanan bir sorun var demektir. Aşağıdaki adresteki güncellemeyi kurun. Cumulative Update for Internet Explorer 6 SP1 (KB912812) Ref : http://forums.asp.net/1/1446560/ShowThread.aspx

TextMode=Password olarak atanmış Textbox'lara deger ekleme

Bazen kullanıcıya kişisel formunu gösterirken parola alanını da düzenleme formuna ekleriz. Ancak parola alanlarında textmode=password yazıldığı için bu alanlara direk txtPassword.text = "..." şeklinde değer atamazsınız. Bu durumda kullanıcıya içerde parolası varmış gibi göstermek amacıyla txtPassword.Attributes.Add("value","parola_karakteri") şeklinde bir satır yazılır. Gösterilen rastgele bir texttir. Ve kullanıcının burayı değiştirmesi halinde password'u update edersiniz.

Gridview İçersinde tarih yada herhangi bir alanın formatlaması

Eğer bir gridview'da tarih yada herhangi bir alanın gösterimini istediğiniz şekilde formatlamak istiyorsanız <asp:boundfield datafield="Tarih_Colonunuz" dataformatstring="{0:d}" htmlencode="false" /> yapmanız yeterli olacaktır (Ondalıklı sayılar için "{0:n}" kullanılabilir). Yada <asp:boundfield datafield="Tarih_Colonunuz" dataformatstring="{0:dd/mm/yyyy}" htmlencode="false" /> şeklinde de istediğiniz formayı özellikle belirtebilirsiniz. Tüm Tarih Formatları

Datasource'u olan bir DropDownlist'e ListItem Eklemek

Eğer dropdownlist'i doldururken uğraşmamak için sqldatasource kullanmışsanız, yada kod içersinden oluşturduğunuz bir datatable'ı dropdownlist'e source olarak vermişseniz bu durumda dropdownlist'e yeni bir item eklemek için dropdownlist'in "AppendDataBoundItems" property'sini true yapmanız gerekiyor. <asp:DropDownList ID="DropDownList1" runat="server" DataSourceID="SqlDataSource1" DataTextField="Text_Field_Adi" DataValueField="Value_Field_Adi" AppendDataBoundItems="true"> <asp:ListItem Text="Seçiniz" Value="0" /> </asp:DropDownList>

Girdview'da sorting yapmak ..

Eğer gridview'da datasource'u sql datasource yada object datasource gibi bir nesne kullanıyorsanız sorting için extra bir şey yapmanıza gerek kalmayacaktır. Sadece kolonları tanımlarken sortexpression alanına data sourcedaki kolon adını yazmak yeterli olur. Ancak eğer datasource'u runtime da oluşturup set ediyorsanız bu durumda kolonlarda sıralama biraz uğraşmanız gerekecek. Protected Sub GridView1_Sorting(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewSortEventArgs) Dim VarolanDeger As String = Me.ViewState("Sort") Dim YeniDeger As String = e.SortExpression Dim EskiDeger As String = ViewState("Sort") Dim AscDesc As String = "" If Not VarolanDeger Is Nothing AndAlso (EskiDeger.IndexOf(YeniDeger) >= 0) Then If (EskiDeger.IndexOf(" ") AscDesc = "DESC" Else AscDesc = EskiDeger.Substring(EskiDeger.IndexOf(" ") + 1) If (AscDesc = "ASC") Then AscDesc = "DESC" Else AscDesc = ...

Gridview'da saklı kolonlardan değer alabilmek ..

Eğer sayfanızda girdview kullanıyor ve buradaki bir kaç kolonun değerini saklayıp sonradan erğişebilmek istiyorsanız bunun yollarından birisi şudur. Normalde bu durumlarda genellikle gridview'daki kolon üzerinde visible="False" denir <asp:BoundField DataField="Alan_Adi" Visible="false" /> Bu durumda gridview'da bu alan için binding gerçekleşmediği için değerine erişilemez. Bunun yerine yapılması gereken alanı tanımlarken <asp:BoundField DataField="Alan_Adi" /> şeklinde tanımlayıp, girdview'ın rowcreate anında o hücreyi gizlemektir. Protected Sub GRVDATA_RowCreated(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) if e.Row.RowType = DataControlRowType.DataRow orelse e.Row.RowType = DataControlRowType.Header then e.Row.Cells(0).Visible = False end if End Sub

System.Web.HttpException: Request timed out

Default olarak asp.net sayfalarında herhangi bir işlem için, machine.config'de tanımlanmış maximum ( ExecutionTimeout ) süre 90 saniyedir. Eğer herhangi bir işlem 90 saniyeden fazla sürerse System.Web.HttpException: Request timed out hatası döner. Bunu değiştirmek iki yol var. Birincisi machine.config üzerinde bu değişikliği yapmak (ki bu değişiklik tüm IIS üzerinde host edilen uygulamalar için geçerli olacaktır), ikinci yol ise web.config de uygulamanıza has olarak bunu yapmak. Web.config de ExecutionTimeout değerinin belirlenmesi. <configuration> <system.web> <httpRuntime executionTimeout="90" maxRequestLength="4096" useFullyQualifiedRedirectUrl="false" minFreeThreads="8" minLocalRequestFreeThreads="4" appRequestQueueLimit="100" /> </system.web> </configuration> Burada executionTimeout attribute'u için istediğiniz süreyi belirleyebilirisiniz. machine.config üzerinde ExecutionTimeout de...

SQL Server 'da yuvarlama fonksiyonları ..

FLOOR = Aşağı yuvarla (Herhangi bir ondalık için sayının kendinden küçük, en büyük tam sayıyı verir) CEILING = Aşağı yuvarla (Herhangi bir ondalık için sayının kendinden büyük, en küçük tam sayıyı verir) ROUND = Sayının yakın olduğu tam sayı değerini verir. SELECT FLOOR(12.252141),Ceiling(12.252141),Round(12.252141,0) Sonuç : 12 13 12.000000 SELECT FLOOR(12.987363),Ceiling(12.987363),Round(12.987363,0) Sonuç : 12 13 13.000000 Not : Round fonksiyonu 2 parametre alır. Birincisi yuvarlayacağı sayı ikincisi ise yuvarlarken virgülden sonra dikkate alacağı hane sayısını ifade eder. Round(12.252141,0) =12.000000 Round(12.252141,1) = 12.300000 Round(12.252141,2) = 12.250000 Round(12.252141,3) = 12.252000 Round(12.252141,4) = 12.252100 ...

MasterPage'de bulunan bir değişkene erişmek ...

Masterpage'de tanımlamış olduğunuz bir değişkene, o master page'i kullanan bir başka sayfadan yada user control'den erişebilmek için, Öncelikle erişilmek istenen kontrol server-side bir kontrol olmasına dikkat edilmelidir. Bu bir html table'da olsa mutlaka runat="server" belirtilmelidir. Master page de diğer yerlerden erişilmesini isteğimiz bir kontrol için public bir property yazılır. Public ReadOnly Property MyTree() As TreeView Get Return MyTree End Get End Property Erişmek istediğiniz sayfanın <%@ Page satırının altına aşağıdaki satırı ekleyin (TypeName=master page'in adı) <%@ MasterType TypeName="MasterPage" %> Sonrasında erişmek istediğiniz sayfadan kolaylıkla aşağıdaki satırı yazabilirsiniz. Dim Tree as TreeView = Master.MyTree Not : Bazen noktadan sonra MyTree'yi göstermeyebiliyor ancak çalışma zamanında herhangi bir hataya neden olmuyor.

BC30456: 'InitializeCulture' is not a member of ...

Eğer herhangi bir asp.net uygulamanızı publish ettikten sonra 'InitializeCulture' is not a member of .. şeklinde bir hata mesajı ile karşılaşacak olursanız bu sorunu çözmek için yapabilecekleriniz şunlar: Eğer framework 2.0 kullanıyorsanız uygulamanızı publish ederken "allow this precompiled site to be updatable". seçeneğinin işaretli olmamasına dikkat edin ASP.NET'in doğru yüklenildiğine emin olun. Kurulumla ilgili sorunları çözmek için command promt ekranında C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis -i komutu ile birlikte aspnet_regiis -r komutlarını çalıştırın. Sayfa içersinde bulunan "inherits" lerin doğru class'larla eşleştiğinden emin olun. web.config'de culture bilgisi girin, örneğin <globalization culture="tr-TR" uiculture="tr"> yada <globalization culture="auto" uiculture="auto"> Yine web.config'de bulunan debug="true" satırını "false" yapın y...

Could not load file or assembly 'System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'

Eğer Ajax kullanılabilen bir uygulamada Could not load file or assembly 'System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' <httpModules> <add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> </httpModules> şeklinde bir hata alıyorsanız yapmanız gereken C:\Program Files\Microsoft ASP.NET\ASP.NET 2.0 AJAX Extensions\v1.0.61025 klasörünün altında bulunan AJAXExtensionsToolbox.dll System.Web.Extensions.dll System.Web.Extensions.Design.dll dosyalarını web uygulamanızın bin klasörü altına kopyalamak olacaktır. Ref : http://forums.asp.net/thread/1578908.aspx

Could not load type 'System.Web.UI.Compatibility.CompareValidator' from assembly 'System.Web.Extensions, Version=1.0.61025.0, Culture=neutral ...

Bir ajax kullanılabilen web uygulamasında eğerki web.config'de Could not load type 'System.Web.UI.Compatibility.CompareValidator' from assembly 'System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' şeklinde bir hata mesajı alıyorsanız yapmanız gerekenler şöyle http://blogs.msdn.com/mattgi/attachment/1516974.ashx adresinden Validators.zip dosyasını indirdikten sonra bin klasörü içersindeki Validators.dll dosyasını web projenizin bin klasörünün altına atın. Ve web config'de tagMapping kısmını aşağıdaki gibi değiştirin. <tagMapping> <add tagType="System.Web.UI.WebControls.CompareValidator" mappedTagType="Sample.Web.UI.Compatibility.CompareValidator, Validators, Version=1.0.0.0"/> <add tagType="System.Web.UI.WebControls.CustomValidator" mappedTagType="Sample.Web.UI.Compatibility.CustomValidator, Validators, Version=1.0.0.0"/> <add tagType="System.Web.UI.WebCon...

T-SQL'de Bölme işleminde ondalıklı değerlerin korunması

SQL Server'da eğer bir tam sayıyı bir başka tam sayıya bölmeye çalışırsanız alacağınız sonuç her zaman bir tam sayı olacaktır. Select 1 / 4 -- Sonuç = 0 Oysa birçok durumda gerçek sonuç bir tam sayı değildir aslında. Bu durumdan kurtulmak için ilk sayının float yada decimal'a dönüştürülmesi yeterli olacaktır. Select cast(1 as float) / 4 -- Sonuç = 0,25