Oracle.DataAccess.dll Versiyon Hatası

Alınan hata:

“Could not load file or assembly ‘Oracle.DataAccess, Version=2.112.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342’ or one of its dependencies. The system Cannot find the file specified.”

Çözüm:

Çalıştığımız ve publish ettiğimiz ortamlar bir birinden farklı ise (x86, x64) Oracle.DataAccess.dll’inden dolayı yukarıdaki gibi hatalarla sık sık karşılaşıyoruz.

Bu hatadan kurtulabileceğimiz yöntemlerden bir tanesi:

Çalışma ortamımızda iki versiyonu aynı anda tutmak. Bunun için iki versiyonu da yüklememiz gerekiyor. Client olarak bir tane standart client yükledikten sonra diğer versiyon için ODAC versiyonlarından bir tanesini yüklememiz yeterli.

ODAC 32 bit

ODAC 64 bit

İki clientı da yükledikten sonra clientlar aşağıdaki gibi görünecektir.

GAC ın son hali ise aşağıdaki gibi olacak (Versiyon olarak sizin yüklediğiniz versiyonlar görülecek).

GAC da iki versiyonda atıldıktan sonra Oracle.DataAccess.dll ini refere edenen projelerde dll özelliklerinin aşağıdaki gibi olduğuna dikkat etmemiz lazım.

Son adım olarakta projenin özelliklerinden Any CPU seçilmeli.

Bir diğer yöntem ise publish ettiğimiz ortamdaki Oracle.DataAccess.dll ini tüm projelere referans olarak eklemek. Daha basit gibi görünsede yanlışlıkla spesific version seçme, gac yerine full path reference seçme gibi hatalara neden olabilir. Buda farklı uygulamalarınızın farklı versiyonlarla çalışmasına sebep olabilir. Tekbir uygulama üzerinde çalışıyorsanız bu yöntem de tercih edilebilir.

İyi çalışmalar,

Ücretsiz Bankacılık Hizmetleri

Malumunuz bireysel kullanıcıların bankalardan en büyük beklentiler EFT, Havale gibi işlemlerini güvenli bir şekilde ve ücretsiz! yapılmasıdır. Bir kaç banka dışında tüm bankalar İnternet şubesinden de olsa bu işlemlerden ciddi ücretler talep ediyorlar ve bir çoğumuzun zoruna gidiyor:). (Ücret almayan bankalardan biri Kuveyt Türk. Şahsen ben ay başında maaşımın çoğunu bu bankaya aktarıyor ve sonrasında da bedavadan etrafa dağıtıyorum:) )

Konumuz olan ücret ödememenin yöntemi ise yeni moda cep şube (mobil şube). Cep şubenin İnternet bankacılığından farkı nedir anlamış da değilim! Her kullanıcının bu işlemleri yapabileceği mobil cihazı yok, olsa da işlem yapmak zor! Bu zorluğa rağmen yılmadan mobil işlemler yaparken ızdırabımı fark eden bir arkadaşımın bir blog yazısını* yönlendirmesi ile ızdırabım sona erdi:) Bilgisayarınızdan mobil cihazdan bağlanıyor gibi cep şubelerine bağlanıp ücretsiz işlem yapabilirsiniz. Nasıl mı?

  1. Öncelikle Firefox kullanıyor olmanız gerekiyor. Kullanmıyorsanız hemen indirin!
  2. Daha sonra Firefox için User Agent Switcher eklentisini kuruyoruz.
  3. Daha sonra yeni gelecek menuden IPhone3 seçeneğini seçiyoruz(Araçlar->Default User gent->iPhone3) ve artık bir mobil cihaz gibi cep şubesine bağlanabiliriz.

 

Hazır olarak iPhone3 seçeneği gelmez ise bahsi geçen blog yazısında anlatıldığı gibi yeni bir tanımlama yapabilirsiniz. İlgili bölüm:

Şu adımları izleyerek siz de bilgisayarınızdan cep şubelerini kullanabilirsiniz.

  1. Öncelikle Firefox kullanıyor olmanız gerekiyor. Kullanmıyorsanız hemen indirin!
  2. Daha sonra Firefox için User Agent Switcher eklentisini kuruyoruz.
  3. Firefoxda Araçlar menüsünden > Default User Agent > Edit User Agents seçeneğini seçiyoruz, açılan pencerede New butonuna tıklayıp şu bilgileri dolduruyoruz.
    iPhone UserAgent
  4. Tekrar Araçlar menüsünden > Default User Agent > iPhone 3.0 seçiyorsunuz.

Artık internette iPhone 3.0 tarayıcı kimliği ile gezmeye başlayabilirsiniz. Bankaların cep şubeleri artık emrinize amade, EFT/havale de bedava!*

*kavidesign

Karpuzun iyisi nasıl seçilir?

Yaz aylarının en önemli mevzusu:)

Karpuzun iyisi nasıl seçilir?

1- Ağırlığını hissedin
Karpuz, ele alındığında göründüğünden daha ağır olmalıdır. Aynı boyutta iki karpuzu elinize alıp test edebilirsiniz. Daha ağır olan daha sulu ve tatlıdır.

2- Altındaki iz koyu olsun
Altındaki ize bakın. İzin koyu renklisini tercih edin. İz ne kadar koyuysa karpuz o kadar tatlı olur. İzin san renklisi, beyazından daha iyidir.

3- Güzel görünsün
Parlak olmayan, üzerinde girinti çıkıntı bulunmayan ve düzgün bir yuvarlaklığa sahip bir karpuz seçin.

4- Kabuğundaki böcek izlerine iyi bakın
Böcekler yeterince olgunlaşıp, kıvama gelmiş karpuzları yemeyi tercih eder. Kabuğu böcekler tarafından yenerek, hafif aşınmış karpuzu alın.

5- Dinleyin
Karpuza vurduğunuzda çıkan ses tok olmalıdır. Eğer ses derinden geliyorsa. bu karpuzun yeterince olgunlaşmadığını gösterir.

Tüm bunlar tamamsa, İyi karpuz garanti.

Ref: Birzamanlar

Geçici Kolon Oluşturma – Geçici Tablo Oluşturma

Geçici Kolon Oluşturma – Geçici Tablo Oluşturma

Common Table Expressions (CTE) kullanarak sorgumuzu içinde geçici tablolar ve kolonlar oluşturabiliriz. Bu oluşturduğumuz tablo ve kolonları sadece aynı sorgu içerisinde istediğimiz kadar kullanabiliriz. Veritabanımızda herhangi bir nesne oluşmaz. Sorgu bitiminde yok olurlar.

Hazırladığınız sorgu içerisinde yeni hesaplanarak oluşturulmuş kolonlar varsa ve sorgu içerisinde bir başka yerde bu kolonu kullanacaksanız, bu tür bir yapı faydalı olacaktır. Aynı kolonu gruplama ve benzeri işlemler için de kullanmak istiyorsanız bu yapı faydalı olacaktır.

CTE yapısını farklı işlemler içinde kullanılabilir burada sadece yeni bir kolon oluşturma özelliği ön plana çıkartılmıştır.

Aşağıda ki örnek CTE yapısını ve kullanımı göstermektedir.

–CTE yapısını tanımlıyoruz. Burada tablo ismini ve kolon isimlerini tanımlıyoruz.

WITH InvoiceAudit_PType ([InvoiceId], [ProjectTypeId], [Barcode])

AS

— CTE içerisini dolduracak sorgu tanımlanıyor.

(

SELECT

[InvoiceId]

,[ProjectTypeId] = CASE WHEN [Barcode] IS NOT NULL THEN

(SUBSTRING([Barcode],1,2))

ELSE NULL

END

–[InvoiceAudit] tablosunda [ProjectTypeId] diye bir kolon yoktur, bunu kendimiz tanımlıyoruz.

,[Barcode]

FROM [InvoiceMapper].[dbo].[InvoiceAudit])

–Tanımladığımız CTE üzerinde sorgu yapıyoruz

SELECT InvoiceId, [ProjectTypeId], [Barcode]

FROM InvoiceAudit_PType

WHERE

ProjectTypeId  is null

Batch Insert with Entity Framework – LINQ to Entity

Batch Insert with Entity Framework – LINQ to Entity

Entity Framework – LINQ to Entity is a good idea for batch insert? Such as more than one thousand records.

When you try to do batch operations, you should be carefully using not only Entity Framework but also most of the ORM tools. The main problem is the context lifetime and according to that memory leaks. Context acts as a cache and in batch operations the size of context increases very quickly and that causes fatal errors or makes the speed of the operations too slow that is unacceptable!

If you use any ORM tools, it is not a good idea using that in batch operation (if it does not have a specific module). For the Entity Framework: After inserting about 1000 records, Entity Framework cause a memory leak and for the 20 0r 30 thousand of records the operation never ends.

You maybe divide the records in to small parts and after inserting each part you can create a new context instance and dispose the previous to avoid  memory leak but the speed! However, if you want to use transaction, you cannot divide the records.

{

int counter = 0;

using (MyEntities dataModel = new MyEntities ())

{

while (counter < 1000) { //Insert counter++; } } } For now the best way for batch operations is; not using the Entity Framework. There are lots of ways to do batch operations without Entity Framework. One of them is using SqlBulkCopy or using native Ado.Net classes. http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlbulkcopy.aspx

I hope that ORM tools and Entity Framework improve themselves in this side.

LINQ – Copy an Entity in Different Contexts

Error:

“An entity object cannot be referenced by multiple instances of IEntityChangeTracker.”

Solution:

“ApplyCurrentValues” method. (For Framework 3.5 “ApplyPropertyChanges”)

This solution is might be useful if you want to copy the scalar values of an entity to another entity that is belong to a different context.

For example I have a method that takes an invoice entity and updates it.

public bool UpdateInvoice(InvoiceEntity invoice)

{

int res = 0;

try

{

using (MyEntities dataModel = new MyEntities ())

{

var originalRecord = (from p in dataModel.InvoiceEntity

where p.InvoiceId == invoice.InvoiceId

select p).FirstOrDefault();

dataModel.ApplyCurrentValues(originalRecord.EntityKey.EntitySetName, invoice);

res = _dataModel.SaveChanges();

}

}

catch (Exception ex)

{

//Logging

throw ex;

}

return res > 0;

}

If you wish, Instead of this method you can create a new instance of the invoice and asign the values using the invoice in the method parameters. However, you have to update that code whenever the invoice table updated.

The table/view does not have a primary key defined

Error:

The table/view does not have a primary key defined and no valid primary key could be inferred. This table/view has been excluded. To use the entity you will need to review your schema, add the correct keys and uncomment it.

Solutions:

The framework requires each entity to have a key. If no key is defined in the in the database object (like a view, or, as in your case, a table with no key), the tools try to infer a key based on the columns of the table or view (at least one non-binary, non-nullable column is required to infer a key). When no key can be inferred, a code comment that contains the corresponding EntityType element (with no Key elements) is added to the SSDL section of the .edmx file.

There are two solutions:

First Solution:

In your case, since it seems that you want a read only entity, you could…

1) Uncomment the SSDL entity

2) Mark one/some properties as Nullable=”False”

3) Add the appropriate Key elements

4) Add a corresponding defining query.

More detail in this forum thread about how to add a defining query.

Hope that helps.

Brian

Second Solution:

Insert to view a non-nullable column. You can use row number as a new column or modify the one of the non-binary current columns as a non-nullable. You can use ISNULL function to make the column as non-nullable.

Using rownumber as a new column:

SELECT ISNULL((ROW_NUMBER() OVER (ORDER BY YEAR DESC)), 0) AS ‘ID’, CITYNAME, YEAR, BRAND, SUM(SUMCOUNT) AS SALES

FROM         dbo.V_CITY_SALES_SUM

WHERE     (PRODUCT = ‘MOTORCYCLE’)

GROUP BY CITYNAME, YEAR, BRAND

If there is a “group by” clause do not make the grouped columns as a non-nullable column. It causes the all rows returned from the entity being the same!

Comments:

In the first solution you need to modify the schema but not the view and in every update you will lost the handmade modifications in the schema. In the second solution you need to modify the view only one time but not the schema so it seems better.

RDL Rapor Dosyalarında RDL 2008 Özelliklerini Kullanımı Hatası

Alınan hata:

The report definition is not valid.
Details: The report definition has an invalid target namespace ‘http://schemas.microsoft.com/sqlserver/reporting/2008/01/reportdefinition’ which cannot be upgraded.

Çözüm:

Bu hatayı alıyorsanız hatanın muhtemel sebebi: RDL 2008 özelliklerini kullanan bir raporunuz var ancak raporları görüntüleme için kullandığınız Report Viewer’iniz RDL 2008 i desteklemiyordur.

Visual Studio 2008 çıktığı tarihlerde SQL Server 2008 yayınlanmamıştı ve bu yüzden VS 2008, RDL 2008 i desteklememektedir. Yapmanız gereken viewer i yükseltmek (VS 2010 /framework 4.0 kullanmak) yada raporunuzu “local mod” da değil “server mod” da çalıştırmak olacaktır.

Eğer VS 2010 ile çalıştığınız halde aynı hatayı alıyorsanız ve çalıştığınız proje önceki VS sürümlerinden dönüştürülmüş ise Report Viewer’in referansları değişmemiş demektir. Report Viewer’i kullandığınız yerden silip yeni bir tane ekleyin (yeni Report Viewer eklenecektir.). Bu arada referanslar bölümünden de Report Viewer’in eski sürüme ait referansları temizleyin.

Bir Sorun Bir Çözüm

Merhabalar,

Bu bölümde karşılaştığımız bir problem ve o probleme ait bir çözüm yer alacak. Ana amacım normalde kendi bilgisayarımda not olarak sakladığım ve çok düzenli olmayan bilgileri burada daha düzenli bir şekilde sizlerle paylaşmak ve kendim için de kaynak olarak notlarımı değil burayı kullanmak olacak.

Bu problemler günlük hayatta karşılaştığımız değişik boyutlarda ki problemler olabilir. Çözüm olarak en iyisi olduğunu düşündüğümüz çözüm görüntülenecek ve  daha iyi bir çözüm bulunduğunda ise bulunan çözüm eski çözümü ezecektir. Konular C# ve SQL başta olmak üzere yazılım geliştirmeyle alakalı konulardır.

Sizlerde isterseniz yeni bir konu açabilir ve cevabını bekleyebilirsiniz yada soru ve cevabı birlikte yazabilirsiniz.

Konu başlatabilmeniz için üye olmanız gerekmektedir.

One Problem One Solution

Hello People,

Welcome to One Problem One Solution. In this category you can find the solutions of some simple or complex problems which are software development problems mainly about c# and SQL.

You can see only one solution for one problem. If we found a better solution, previous one will be overridden. You can post your solution if you think it is better.  Also you can ask a question and wait for answer or ask a question and give the answer:)