繁体   English   中英

无法更新 SQL 表中的行

[英]Unable to Update Rows in a SQL Table

我有一些代码可以将数据插入和更新到 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# 代码有问题? 任何反馈表示赞赏!

您需要在附图中提到的位置使用一些执行方法来执行您的 Transact-SQL 语句。 您曾经使用过 ExecuteScaler() 来计算现有记录,但在更新时您错过了添加任何执行方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM