2010-04-28 12 views
5

eşit içinde uyumsuz bu benim kodveri türleri Metin ve nvarchar operatörü

ProductController.cs

public ActionResult Details(string id) 
{ 
    product productx = productDB.products.Single(pr => pr.Product1 == id); 
    return View(productx); 


} 

Details.aspx

<td> 
     <%-- : Html.ActionLink("Edit", "Edit", new { id=item.Id }) % --> 
     <%: Html.ActionLink("Details", "Details", new { id = item.Product1 })%> 
    </td> 

bu olduğunu bir sql veritabanından bazı ürünleri listelemek için ne kullanırım, her ürün daha inf göstermek için bir Ayrıntılar sayfasına bir bağlantı var ormations hakkında o

neyi Im yalnızca o bağlantıdaki ürün etiketi koymak için çalışıyor onu www.mysite.com ürünler \ \ pil (değil id)

hayal ettik gibi bir şey göstermesine izin vermek için Bu çalışmalı, ancak bir atıyor Veri tipleri metin ve nvarchar, operatöre eşit değildir. hata ve ne (pr => pr.Product1.Equals(id)); eserler

hata açıktır ve Im ben bu şekilde çalışması yapmak yapmalıyım nasıl soran? SQL Server

sayesinde

cevap

22

TEXT kolonlar Büyük Nesne verilerini kabul edilir ve bu nedenle aranabilir/indeksli değillerdir. Ayrıca, kullanımdan kaldırıldılar. Yani aslında sorun, uygulamanızda değil, veritabanınızda.

Sütun türünü varchar(max) olarak değiştirirseniz, aynı miktarda karakter verilerini saklayabilirsiniz, ancak bu soruna sahip olmamalıdır. Ardından, Linq'inizi SQL nesnesine güncelleyin ve artık bu belirli hatayı almayacaksınız.

ID adında bir sütun TEXT veya varchar(max), bu otomatik artışlı tamsayı kimlik veya GUID ( uniqueidentifier) olmalıdır olmaması gerektiğini ... söyledikten sonra, böylece DB tasarımını gözden geçirmeniz yararlı olabilir. Ancak, kimliklerin keyfi boyutun dize değerleri olması için iyi nedenlere sahip olduğunuzu varsayarsak, yukarıdaki değişiklik sütunu filtrelemenize izin verir.

+0

Teşekkürler! Varchar (max) 'a, başka bir küçük soruya ayarlayarak çalışır: Productx'i geri döndürme biçimine ne dersin, bu en iyi uygulama mı? – Hassen

+0

@metro: Ürünü iade ettiğiniz yol gayet iyi. Ancak, en iyi uygulamalar hakkında konuşuyorsak, * gerçekten * kimlik için farklı bir veri türü kullanmayı düşünmelisiniz; Büyük karakter tipleriyle * büyük * performans sorunları yaşayacaksınız. – Aaronaught

0

Bu sorun olabilir sonra oluşmaya kullanın:

EXEMPLE

string sql = "Select * from TB_USER where Name = @Name"; 
SqlCommand cmd = new SqlCommand(sql); 

Bu uyumsuz:

cmd.Parameters.Add("@Nome", SqlDbType.Text).Value = nome; 

Değişim için:

cmd.Parameters.Add("@Nome", SqlDbType.VarChar, 50).Value = nome; 
İlgili konular