SORU
5 EYLÜL 2008, Cuma


Ben ETMENİZ SQL Server Compact Edition Veritabanı SQL "Satır bulunamadı ya da değiştirilen" bir Özel durumu çözmek için ne yapabilirim?

Bağlantı (SQL Server Compact Edition karşı) SQL için bir SERİ ile bir kaç özellikleri güncelledikten sonra DataContext için SubmitChanges yürütürken "Satır bulunamadı ya da değişti." ben ChangeConflictException.

var ctx = new Data.MobileServerDataDataContext(Common.DatabasePath);
var deviceSessionRecord = ctx.Sessions.First(sess => sess.SessionRecId == args.DeviceSessionId);

deviceSessionRecord.IsActive = false;
deviceSessionRecord.Disconnected = DateTime.Now;

ctx.SubmitChanges();

Sorgu aşağıdaki SQL oluşturur:

UPDATE [Sessions]
SET [Is_Active] = @p0, [Disconnected] = @p1
WHERE 0 = 1
-- @p0: Input Boolean (Size = 0; Prec = 0; Scale = 0) [False]
-- @p1: Input DateTime (Size = 0; Prec = 0; Scale = 0) [9/4/2008 5:12:02 PM]
-- Context: SqlProvider(SqlCE) Model: AttributedMetaModel Build: 3.5.21022.8

Bariz sorun0=1Kayıt yüklendi sonra tüm özellikleri "birincil anahtar eklemek için doğrudur." deviceSessionRecord teyit ettim Ayrıca ne zaman "bu neden başarısız hakkında ek bilgi yok." ChangeConflictException alıcı Ayrıca bu durum, veritabanında tam olarak bir kayıt (update etmeye çalışıyorum kaydı) ile atılmış olduğunu teyit ettim

Garip olan kodu farklı bir bölümünde çok benzer bir update deyimi var ve aşağıdaki SQL üretir ve aslında SQL Server Compact Edition veritabanı güncelleme yapmasıdır.

UPDATE [Sessions]
SET [Is_Active] = @p4, [Disconnected] = @p5
WHERE ([Session_RecId] = @p0) AND ([App_RecId] = @p1) AND ([Is_Active] = 1) AND ([Established] = @p2) AND ([Disconnected] IS NULL) AND ([Member_Id] IS NULL) AND ([Company_Id] IS NULL) AND ([Site] IS NULL) AND (NOT ([Is_Device] = 1)) AND ([Machine_Name] = @p3)
-- @p0: Input Guid (Size = 0; Prec = 0; Scale = 0) [0fbbee53-cf4c-4643-9045-e0a284ad131b]
-- @p1: Input Guid (Size = 0; Prec = 0; Scale = 0) [7a174954-dd18-406e-833d-8da650207d3d]
-- @p2: Input DateTime (Size = 0; Prec = 0; Scale = 0) [9/4/2008 5:20:50 PM]
-- @p3: Input String (Size = 0; Prec = 0; Scale = 0) [CWMOBILEDEV]
-- @p4: Input Boolean (Size = 0; Prec = 0; Scale = 0) [False]
-- @p5: Input DateTime (Size = 0; Prec = 0; Scale = 0) [9/4/2008 5:20:52 PM]
-- Context: SqlProvider(SqlCE) Model: AttributedMetaModel Build: 3.5.21022.8

Birincil alanların değerleri tespit edilmiştir Veritabanı Şema ve SERİ sınıfları oluşturduğu DBML olarak teyit ettim.

Bu, iki aşamalı bir soru neredeyse sanırım:

  1. O zaman neden bu durum ortaya atılır?
  2. Oluşturulan SQL ikinci set inceledikten sonra, tüm alanları kontrol etmek için iyi olurdu çakışmaları için gibi görünüyor, ama bu oldukça verimsiz olurdu. Bu her zaman böyle çalışıyor? Bir ayar sadece birincil anahtar kontrol etmek için var mı?

Son iki saattir bununla savaşıyorum herhangi bir yardım mutluluk duyacağız.

Kevin...

CEVAP
17 EYLÜL 2008, ÇARŞAMBA


Thats kötü, ama basit:

Eğer O tüm alanlar için veri türlerini R-Designer SQL tablo veri türlerini maç/olmadığını kontrol edin. Null için kontrol edin!Bir sütun ya/Ar-Tasarımcı O ve SQL de null ya da NOT NULL olabilecek olmalıdır.

Örneğin, bir NVARCHAR "başlık" veritabanında Null ve içerdiği değeri NULL olarak işaretlenmiş sütun Sütun R-Eşleme/O DEĞİL Null olarak işaretlenmiş olsa bile, SERİ başarılı bir şekilde yük ve boş Dize sütun ayarlayın.

  • Şimdi bir şey arama ve değiştirme () SubmitChanges.
  • SERİ bir SQL sorgusu oluşturur [title] IS"", Başlığı başkası tarafından değiştirilmiş değil emin olmak için. içeren
  • SERİ özelliklerini arar eşleme [başlık].
  • SERİ [title] Null bulacaksınız.
  • [Title] Null DEĞİL beri, mantık asla BOŞ olabilir!
  • Sorgu en iyi duruma getirme, SERİ yani "0 = 1", yerini alır Eşdeğer bir "hiç". SQL

Aynı belirti görünür zaman veri türleri alan eşleşmiyor veri türü SQL veya alanları eksik, beri SERİ kullanamazsınız emin olmak için SQL veri değişmemişse bu yana okuma verileri.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Andrey Menshikov

    Andrey Mensh

    28 Ocak 2012
  • listedabive

    listedabive

    30 Ocak 2007
  • the one am radio

    the one am r

    6 Mayıs 2006