Невозможно обновить строки в таблице SQL - PullRequest
0 голосов
/ 14 апреля 2020

У меня есть код, который вставляет и обновляет данные в таблицу 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#? Любые отзывы приветствуются!

1 Ответ

1 голос
/ 14 апреля 2020

Вам необходимо использовать какой-либо метод выполнения в указанном месте на прикрепленном изображении для выполнения вашего оператора Transact- SQL. Вы использовали ExecuteScaler () один раз, чтобы выяснить существующую запись, но во время обновления вы пропустили добавление любого метода выполнения.

...