У меня есть код, который вставляет и обновляет данные в таблицу sql. Я использую ExecuteScalar, чтобы проверить, существует ли уже строка с тем же UserName и DeviceId. Если он существует, мы запускаем хранимую процедуру обновления, переопределяя поля DataSource, PendingCount и LastUpdated. Если строка не существует, мы используем хранимую процедуру вставки. Хранимая процедура вставки работает отлично, но хранимая процедура обновления, похоже, ничего не делает. Строка остается прежней. Вот код, о котором идет речь:
try
{
using (SqlConnection sqlConnection = new SqlConnection(connectionString))
{
sqlConnection.Open();
using (SqlCommand comm = new SqlCommand(query, sqlConnection))
{
comm.CommandType = System.Data.CommandType.Text;
comm.Parameters.Add(new SqlParameter("@DataSource", pending.DataSource));
comm.Parameters.Add(new SqlParameter("@LastUpdated", pending.LastUpdated));
comm.Parameters.Add(new SqlParameter("@PendingCount", pending.PendingCount));
comm.Parameters.Add(new SqlParameter("@DeviceId", pending.DeviceId));
comm.Parameters.Add(new SqlParameter("@UserName", pending.UserName));
int rowCount = (int)comm.ExecuteScalar();
if (rowCount > 0)
{
using (SqlCommand sqlComm = new SqlCommand("sp_UpdatePendingAttachments", sqlConnection))
{
sqlComm.CommandType = System.Data.CommandType.Text;
sqlComm.Parameters.Add(new SqlParameter("@DataSource", pending.DataSource));
sqlComm.Parameters.Add(new SqlParameter("@LastUpdated", pending.LastUpdated));
sqlComm.Parameters.Add(new SqlParameter("@PendingCount", pending.PendingCount));
sqlComm.Parameters.Add(new SqlParameter("@DeviceId", pending.DeviceId));
sqlComm.Parameters.Add(new SqlParameter("@UserName", pending.UserName));
}
}
else
{
using (SqlCommand sqlCommand = new SqlCommand("sp_InsertPendingAttachments", sqlConnection))
{
sqlCommand.CommandType = System.Data.CommandType.StoredProcedure;
sqlCommand.Parameters.Add(new SqlParameter("@DataSource", pending.DataSource));
sqlCommand.Parameters.Add(new SqlParameter("@UserName", pending.UserName));
sqlCommand.Parameters.Add(new SqlParameter("@DeviceId", pending.DeviceId));
sqlCommand.Parameters.Add(new SqlParameter("@PendingCount", pending.PendingCount));
sqlCommand.Parameters.Add(new SqlParameter("@LastUpdated", pending.LastUpdated));
sqlCommand.ExecuteNonQuery();
}
}
}
}
return new BaseResponse();
}
Хранимая процедура обновления называется sp_UpdateStoredProcedure:
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[sp_UpdatePendingAttachments]
(
-- Add the parameters for the stored procedure here
@DataSource VARCHAR(150) = '',
@DeviceId VARCHAR(150) = '',
@UserName VARCHAR(150) = '',
@PendingCount int = null,
@LastUpdated DateTime = null
)
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON
-- Insert statements for procedure here
UPDATE PendingAttachments
SET DataSource = @DataSource, PendingItemsCount = @PendingCount, LastUpdated = @LastUpdated
WHERE DeviceId = @DeviceId AND UserName = @UserName
END
GO
Есть идеи, почему обновление строк не работает? Это проблема с хранимой процедурой или кодом c#? Любые отзывы приветствуются!