У меня есть хранимая процедура, которая обновляет клиентов и сетку данных для работы с данными.Редактирование не первичных значений поля работает хорошо, но если я пытаюсь обновить значение поля первичного ключа, я получаю исключение «Нарушение параллелизма: команда UpdateCommand затронула 0 из ожидаемых 1 записей.»
Это мой sp:
create procedure dbo.UpdateCustomers
@CustomerID nchar(5),
@CompanyName nvarchar(40),
@ContactName nvarchar(30),
@ContactTitle nvarchar(30),
@Address nvarchar(60),
@City nvarchar(15),
@Region nvarchar(15),
@PostalCode nvarchar(10),
@Country nvarchar(15),
@Phone nvarchar(24),
@Fax nvarchar(24)
as
update Customers
set CustomerID = @CustomerID, CompanyName = @CompanyName, ContactName = @ContactName, ContactTitle = @ContactTitle, Address = @Address,
City = @City, Region = @Region, PostalCode = @PostalCode, Country = @Country, Phone = @Phone, Fax = @Fax
where CustomerID = @CustomerID
go
И в коде:
public void UpdateData()
{
using (var cn = new SqlConnection(_cs))
{
....
var updateCmd = new SqlCommand("UpdateCustomers", cn);
updateCmd.CommandType = CommandType.StoredProcedure;
updateCmd.Parameters.Add(
new SqlParameter("@CustomerID", SqlDbType.NVarChar, 5, "CustomerID"));
updateCmd.Parameters.Add(
new SqlParameter("@CompanyName", SqlDbType.NVarChar, 40, "CompanyName"));
updateCmd.Parameters.Add(
new SqlParameter("@ContactName", SqlDbType.NVarChar, 30, "ContactName"));
updateCmd.Parameters.Add(
new SqlParameter("@ContactTitle", SqlDbType.NVarChar, 30, "ContactTitle"));
updateCmd.Parameters.Add(
new SqlParameter("@Address", SqlDbType.NVarChar, 60, "Address"));
updateCmd.Parameters.Add(
new SqlParameter("@City", SqlDbType.NVarChar, 15, "City"));
updateCmd.Parameters.Add(
new SqlParameter("@Region", SqlDbType.NVarChar, 15, "Region"));
...
_da.UpdateCommand = updateCmd;
var count = _da.Update(_ds, "Customers"); //exception
GetData();
}
}
Я понимаю, что когда эта процедура выполняется с новым CustomerID, нет строк, на которые повлияло обновление.Но как я могу передать из приложения новый и старый CustomerID?
Примерно так в SQL:
update Customers set CustomerID = 'NEWVALUE' where CustomerID = 'BSBEV'
....
и т. Д.