我正在尝试从C#在SQL Server中运行存储过程。存储过程在SSMS中运行良好。拉这些记录需要45秒。但是在C#中,同一个调用会收到超时错误。这可能是什么问题? XML是C#中网格中表的主键列表。所以它可以有1行或数百行。存储过程可以很好地解析它并插入带有其他数据的临时表。
SqlConnection connection = new SqlConnection(connectionstring);
ce.Database.Initialize(force: false);
connection.Open();
SqlCommand cmd = new SqlCommand("usp_GetAllAccounts", connection);
cmd.CommandType = System.Data.CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@LoanList", DBNull.Value);
cmd.Parameters.AddWithValue("@LoanIdFlagBit",detailModel.activeFlag);
cmd.Parameters.AddWithValue("@DataDtFrom", detailModel.fromDataDt);
cmd.Parameters.AddWithValue("@DataDtTo",detailModel.toDataDt)
cmd.Parameters.AddWithValue("@EffDtFrom",detailModel.fromEffDt)
cmd.Parameters.AddWithValue("@EffDtTo", detailModel.toEffDt)
cmd.Parameters.AddWithValue("@JournalDetailId", detailModel.JournalDetailId)
cmd.Parameters.AddWithValue("@JournalDetailIdList", journalDetailList).DbType = DbType.Xml;
SqlDataReader reader = cmd.ExecuteReader();
我的存储过程代码如下:
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
@LoanList XML,
@LoanIdFlagBit BIT = 1,
@DataDtFrom SMALLDATETIME = NULL,
@DataDtTo SMALLDATETIME = NULL,
@EffDtFrom SMALLDATETIME = NULL,
@EffDtTo SMALLDATETIME = NULL,
@JournalDetailId INT = 0,
@JournalDetailIdList XML = NULL
AS
SET NOCOUNT ON
答案 0 :(得分:1)
更改SqlCommand对象上的CommandTimeout属性 - 默认值为30秒;
我认为SSMS中的默认值是没有超时
答案 1 :(得分:0)
很明显,我在几年前从一个项目中找到的这些代码仍然有用。
SqlCommand cmd = new SqlCommand("usp_GetAllAccounts", connection);
cmd.CommandType = System.Data.CommandType.StoredProcedure;
**SqlCommandBuilder.DeriveParameters(cmd);**
然后我可以为for循环中返回的每个参数赋值。我不明白,但这会将我的时间缩短8分钟,缩短到45秒,这与SSMS相当。