Hej, Det jag kommer med nu är inte en snygg lösning, men skulle kunna lösa ditt problem för tillfället. Se till att du fyller upp de kolumner som ska innehålla blanksteg med blanksteg innan du kör en update. Hej, hmm.. Testa med att sätta parameterns SourceVersion till DataRowVersion.Original. Ingen skillnad. Gjorde följande tillägg: Blir tyvärr samma fel. Har denna kod i Fetch-steget (med tillägg av FillSchema): Jag kan tyvärr inte hjälpa dig mer :( Inte mycket att göra. Tackar för hjälpen ändå. :) Hej,COM+ raderar blanksteg
Har postat motsvarande fråga på microsoft.public.dotnet.framework.adonet men har inte fått några svar.
Mitt problem är att jag har en komponent som hämtar ett dataset från en Oracle-databas (8.1.7) med hjälp av en DataAdapter och sedan gör jag mina ändringar i datasetet och sparar tillbaka dessa med en DataAdapter och en CommandBuilder (GetUpdateCommand). Vid själva uppdateringen har mitt problem dykt upp och jag får felmeddelandet "Concurrency violation: the UpdateCommand affected 0 records.". Felet i sig beror på att ett fält i databasen (Varchar2(20)) är utfyllt med blanksteg och när jag kör komponenten i COM+ trimmas dessa blanksteg bort vid hämtningen vilket innebär att när ändringarna skall sparas så får jag en mismatch på blankstegsfältet eftersom det inte längre har samma innehåll.
Jag har provat lite att skapa ett eget UpdateCommand där jag kör Trim() på alla variabler, men det fungerar inte:
<code>oDA.UpdateCommand.CommandText = oDA.UpdateCommand.CommandText.Replace("?", "Trim(?)")</code>
Självklart kan man tycka att det inte skall ligga massa blanksteg i fältet, men det är kundens databas och jag vill helst lösa detta via egen kod.
Tack på förhand!
/JeppeSv: COM+ raderar blanksteg
Du skulle även kunna tvinga DataSetet att uppdatera poster även om du först får ett concurrency valiation. Se bara till så inga andra system är beroende av att fältet innehåller massor av blanksteg.
/Fredrik Normén NSQUARED2
http://www.nsquared2.netSv: COM+ raderar blanksteg
Problemet är att fälten inte alltid är utfyllda. Tabellen är ganska känslig och hårt belastad också, så jag kan inte släppa igenom mina uppdateringar om jag fått en krock.
/JeppeSv: COM+ raderar blanksteg
<code>
myParm.SourceVersion = DataRowVersion.Original
</code>
REDIGERAT:
Jag har haft samma problem en gång i tiden, att kolumner blir blanka. Jag löste problemet genom att använda FillSchema med SchemaType.Source innan jag fyllde mitt DataSet.
/Fredrik Normén NSQUARED2
http://www.nsquared2.netSv: COM+ raderar blanksteg
<code>
Dim oParam As OleDb.OleDbParameter
For Each oParam In oDA.UpdateCommand.Parameters
oParam.SourceVersion = DataRowVersion.Original
Next
</code>
/JeppeSv: COM+ raderar blanksteg
<code>
oDA = New OleDb.OleDbDataAdapter("SELECT * FROM " & sDB & "." & sTable , sConnString)
oDA.FillSchema(oDS, SchemaType.Source)
oDA.Fill(oDS, sTable)
</code>
/JeppeSv: COM+ raderar blanksteg
Såg på nätet att det är andra som har precis samma fel som dig.
Tyvärr är det ingen som har kunnat svarat på deras inlägg :(
Använder du Microsoft Oracle provider? Om, så kan du allitd försöka skicka mail till MS och fråga dom. Om du inte har en email adress till någon av dom på ADO.Net teamet så säg till så ska jag ge dig en adress.
/Fredrik Normén NSQUARED2
http://www.nsquared2.netSv: COM+ raderar blanksteg
Jag använder tyvärr OleDb eftersom OracleClient kräver Oracle 9 och providern i VS 2002 hade inget stöd för distribuerade transaktioner.
Verkar alltså som att jag får försöka få kunden att inte ha massa blanksteg i databasen...
/JeppeSv: COM+ raderar blanksteg
Här kommer en uppdatering på nuvarande problem-status:
Har funnit att XML-standarden inte stödjer mellanslag utan tas bort och vad jag har förstått så serialiseras alla data när de skickas till och från en COM+-komponent och därmed försvinner alltså mellanslagen.
Här är en kodsnutt som visar detta:
<code>
Dim ds As New DataSet
Dim sr As New System.IO.StringReader("<NewDataSet><MyTable><MyField> </MyField></MyTable></NewDataSet>")
Dim result As String
ds.ReadXml(sr)
result = ds.Tables(0).Rows(0).Item("MyField") ' <---- Mellanslaget borta
</code>
Kommer nu att lämna alternativet med DataAdapter och CommandBuilder, men om någon kommer på någon annan lösning på problemet så är alla förslag välkomna.
/Jeppe