**编辑*****************我从GETDATE()更改为SYSDATETIME()。我也将测量值从毫秒更改为微秒。处理过程进行得如此之快,以至于毫秒级都无法测量。
我使用此代码的目的是计算传递到存储过程中的查询字符串的处理时间。查询字符串由用户创建,该用户是一名参加sql /数据库课程的学生。在后续查询中,将字符串与键进行比较,以确定它是否为分配产生正确的结果。就像您看到的那样,是VB.NET代码(.NET 4.5项目)调用了C#方法(.NET 3.5项目),该方法调用了存储过程(SQL SERVER 2012)。
我在主程序项目中的初始调用是在这里:
Dim executionTime As Integer = exercise.GetSqlTime(txtUserSQL, connectionString)
调用的方法在这里:
public int GetSqlTime(string SqlString, string ConnectionString)//bookmark
{
int executionTime = 0;
SqlConnection con = new SqlConnection(ConnectionString);
using (SqlCommand cmd = new SqlCommand("QueryExecutionTime", con))
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@UserSQLstring", SqlDbType.NVarChar).Value = SqlString;
cmd.Parameters.Add("@Duration", SqlDbType.Int);
cmd.Parameters["@Duration"].Direction = ParameterDirection.Output;
con.Open();
cmd.ExecuteNonQuery();
con.Close();
executionTime = Convert.ToInt32(cmd.Parameters["@Duration"].Value);
}
return executionTime;
}
我的存储过程在这里:
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[QueryExecutionTime]
@UserSQLstring NvarChar(3000),
@Duration int OUTPUT
AS
BEGIN
SET NOCOUNT ON;
DECLARE @StartTime datetime = GETDATE()
EXEC sp_executesql @UserSQLstring
DECLARE @EndTime datetime = GETDATE()
SET @Duration = DATEDIFF(MILLISECOND,@StartTime,@EndTime)
END
当查询字符串正确时,结果为0。当字符串不正确时,它将返回一个介于1.4到2.5秒之间的值
这是我第一次使用带有输出参数的存储过程。我不知道这会变得如此具有挑战性。
我是否忽略了一个可以使此工作正常进行的简单细节?我已经在单独的Stack Overflow上尝试了至少五个或六个示例,以及其他几个网站。您在这里看到的是我的最新版本。如果您需要其他信息,请告诉我。
如果您知道这样做的更好方法,欢迎您提出任何建议。
您的结果可能正确。如果您的SQL SERVER版本是2008或更高版本,请使用SYSDATETIME()而不是GETDATE(),因为它具有更高的准确性(或分辨率)。否则,您可以尝试多次运行查询字符串,然后将结果除以运行次数。格式错误的查询字符串的执行时间应该被丢弃。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句