提问人:Gabriel Scarafia 提问时间:10/25/2023 最后编辑:marc_sGabriel Scarafia 更新时间:10/25/2023 访问量:66
为什么存储过程可以工作,但命令会引发超时?
Why does the stored procedure work, but command throws timeout?
问:
这是我的函数,应该插入一行(对不起我的英语不好):addDocument
int,guid,string
internal static bool AddDocument(int userId, IFormFile document)
{
using SqlCommand cmd = new() { CommandType = CommandType.StoredProcedure };
cmd.BeginTransaction(IsolationLevel.ReadUncommitted);
try
{
cmd.Parameters.Clear();
cmd.CommandText = "UserDocument_Add";
cmd.Parameters.Add("@UserId", SqlDbType.Int).Value = userId;
cmd.Parameters.Add("@FileName", SqlDbType.NVarChar, 200).Value = document.FileName;
var guid = Guid.NewGuid();
cmd.Parameters.Add("@Guid", SqlDbType.UniqueIdentifier).Value = guid;
// This line throws a timeout error
var result = cmd.ExecuteReturnInt32();
// <--more code-->
return true;
}
catch
{
cmd.Rollback();
return false;
}
}
这是我在 SQL Server 中创建的存储过程:
CREATE PROCEDURE [dbo].[UserDocument_Add]
@UserId int,
@FileName nvarchar(200),
@Guid uniqueidentifier
AS
BEGIN
SET NOCOUNT ON;
IF EXISTS (SELECT 1 FROM [User_Document]
WHERE (([UserId] = @UserId) AND (ExternalId = @Guid)))
BEGIN
RETURN -1;
END
INSERT INTO [User_Document] ([UserId], ExternalId, [FileName], CreatedBy)
VALUES (@UserId, @Guid, @FileName, @UserId)
RETURN 1
END
答: 暂无答案
评论
BeginTransaction
ExecuteReturnInt32
SqlCommand
SqlConnection
SqlConnection
BeginTransaction
SqlConnection
ExecuteReturnInt32()
ExecuteNonQuery()
ExecuteReturnInt32
UserDocument_Add
@UserId
@FileName
@UserId
@Guid
@Guid