Concurrecny error

  • Thread starter Thread starter Terry Burns
  • Start date Start date
T

Terry Burns

The dataAdapter thinks there is an error because 0 rows were updated when
you did an Update, you need to isolate the reason for this by debugging.
 
Did you write the Update code yourself. Its easy to make an error, try
creating a new project and letting the wizard write the update code and then
check it against yours.
 
The reason for this is that you have a timestamp or something of that
nature on the record which was changed before you made the update.

For example, you could have a timestamp value on the row. When you
select the row, say the value is "a". Then, some other operation somewhere
saves the record, and it updates to "b". Then, you try and save your
changes. When you save it, it compares "a" with "b", and realizes that
someone else made a change, and you might not want to commit your change,
since the data you have is outdated.

Hope this helps.
 
More generically, the original posted has a WHERE clause in the UPDATE
statement that is not matching any rows. It is possible, if he crafted this
UPDATE himself, that he is doing something other than looking at a TimeStamp
or DateTime field, or a laborious comparison of all fields before and
after -- or that he has implemented them wrong.

Figure out why the UPDATE isn't affecting any rows and you have the answer.
It doesn't matter that the datarow in the datatable has changed; it only
matters whether SQL Server can find any matching record(s) to put the
changed data into.

--Bob

Nicholas Paldino said:
The reason for this is that you have a timestamp or something of that
nature on the record which was changed before you made the update.

For example, you could have a timestamp value on the row. When you
select the row, say the value is "a". Then, some other operation
somewhere saves the record, and it updates to "b". Then, you try and save
your changes. When you save it, it compares "a" with "b", and realizes
that someone else made a change, and you might not want to commit your
change, since the data you have is outdated.

Hope this helps.


--
- Nicholas Paldino [.NET/C# MVP]
- (e-mail address removed)

perspolis said:
I chnage my dataset and even check the row that raise this error..
but that row has modified row state ..then I think it can be updated..
but it dosen't :(
 
Doesn't change the solution -- you have to determine why the second UPDATE
isn't matching any records. Something makes the WHERE condition false the
second time. What is it?

--Bob
 
[sigh] I'm not saying that you are doing anything special. I am saying
that:

1) A concurrency error happens when @@ROWCOUNT = 0 after the UPDATE.
2) Therefore, we can deduce that for some reason @@ROWCOUNT = 0 after your
2nd update.
3) Therefore, something in the WHERE no longer matches any available
records.
4) You have to find out what that is. You have to do this whether or not it
makes any sense to you, whether or not it happens only on the 2nd update,
and whether or not you want to. ;-)

I would start by setting a breakpoint after the error and then go into Query
Analyzer and call up the record that was just updated, both before and after
the rollback. Then I would step through until you can see what parameter
values are being passed to the DB when you attempt the 2nd update. You
might also get yet a third copy of the record you're concerned with, just
before that 2nd update. You might also try to manually do a SELECT with the
same WHERE condition as the UPDATE to see if it returns anything.

Somewhere in there you will have an "AHAH! moment".

--Bob
 
hi all
When I update my dataset it gives me an error which follows
"Concurrecny failed, 0 record affected"
I don't know why??..I don't do anything that raise this error..
just when user press Save button I call Update mehtod of my SqlDataAdaptor..
 
I chnage my dataset and even check the row that raise this error..
but that row has modified row state ..then I think it can be updated..
but it dosen't :(
 
thx all..I use a transaction..when an error occurs I rollback
transaction..and when I change my dataset again and correct that error the
concurrency error occures...

Bob Grommes said:
More generically, the original posted has a WHERE clause in the UPDATE
statement that is not matching any rows. It is possible, if he crafted this
UPDATE himself, that he is doing something other than looking at a TimeStamp
or DateTime field, or a laborious comparison of all fields before and
after -- or that he has implemented them wrong.

Figure out why the UPDATE isn't affecting any rows and you have the answer.
It doesn't matter that the datarow in the datatable has changed; it only
matters whether SQL Server can find any matching record(s) to put the
changed data into.

--Bob

message news:[email protected]...
The reason for this is that you have a timestamp or something of that
nature on the record which was changed before you made the update.

For example, you could have a timestamp value on the row. When you
select the row, say the value is "a". Then, some other operation
somewhere saves the record, and it updates to "b". Then, you try and save
your changes. When you save it, it compares "a" with "b", and realizes
that someone else made a change, and you might not want to commit your
change, since the data you have is outdated.

Hope this helps.


--
- Nicholas Paldino [.NET/C# MVP]
- (e-mail address removed)

perspolis said:
I chnage my dataset and even check the row that raise this error..
but that row has modified row state ..then I think it can be updated..
but it dosen't :(
The dataAdapter thinks there is an error because 0 rows were updated
when
you did an Update, you need to isolate the reason for this by debugging.

--
Terry Burns
http://TrainingOn.net
hi all
When I update my dataset it gives me an error which follows
"Concurrecny failed, 0 record affected"
I don't know why??..I don't do anything that raise this error..
just when user press Save button I call Update mehtod of my
SqlDataAdaptor..
 
in my project I have 2 tables (one master and another details)
first I update master then details..when I make a mistake in details and
update both ,the details gives me an error then I correct that error and
update both again..this time I get a concurrency error...I don't do anything
special to get this error..
 
in my project I have 2 tables (one master and another details)
first I update master then details..when I make a mistake in details and
update both ,the details gives me an error then I correct that error and
update both again..this time I get a concurrency error...I don't do anything
special to get this error..

Nicholas Paldino said:
The reason for this is that you have a timestamp or something of that
nature on the record which was changed before you made the update.

For example, you could have a timestamp value on the row. When you
select the row, say the value is "a". Then, some other operation somewhere
saves the record, and it updates to "b". Then, you try and save your
changes. When you save it, it compares "a" with "b", and realizes that
someone else made a change, and you might not want to commit your change,
since the data you have is outdated.

Hope this helps.


--
- Nicholas Paldino [.NET/C# MVP]
- (e-mail address removed)

perspolis said:
I chnage my dataset and even check the row that raise this error..
but that row has modified row state ..then I think it can be updated..
but it dosen't :(
 
thx so much bob
Bob Grommes said:
[sigh] I'm not saying that you are doing anything special. I am saying
that:

1) A concurrency error happens when @@ROWCOUNT = 0 after the UPDATE.
2) Therefore, we can deduce that for some reason @@ROWCOUNT = 0 after your
2nd update.
3) Therefore, something in the WHERE no longer matches any available
records.
4) You have to find out what that is. You have to do this whether or not it
makes any sense to you, whether or not it happens only on the 2nd update,
and whether or not you want to. ;-)

I would start by setting a breakpoint after the error and then go into Query
Analyzer and call up the record that was just updated, both before and after
the rollback. Then I would step through until you can see what parameter
values are being passed to the DB when you attempt the 2nd update. You
might also get yet a third copy of the record you're concerned with, just
before that 2nd update. You might also try to manually do a SELECT with the
same WHERE condition as the UPDATE to see if it returns anything.

Somewhere in there you will have an "AHAH! moment".

--Bob

perspolis said:
in my project I have 2 tables (one master and another details)
first I update master then details..when I make a mistake in details and
update both ,the details gives me an error then I correct that error and
update both again..this time I get a concurrency error...I don't do
anything
special to get this error..

error
the
 
Back
Top