博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
c#客户端调用sql server 存储过程速度慢的问题
阅读量:4360 次
发布时间:2019-06-07

本文共 6231 字,大约阅读时间需要 20 分钟。

1 : c#代码是

 

 

SqlConnection connNew = null;                        connNew = new SqlConnection(@"Data Source="XXX");                        connNew.Open();                        SqlCommand commNew = connNew.CreateCommand();                        commNew.CommandText = "sp_catcher_MeraRptCAV_Insert_detail";                        commNew.CommandType = System.Data.CommandType.StoredProcedure;                        commNew.CommandTimeout = 300;                        commNew.Parameters.Add(new SqlParameter()                        {                            ParameterName = "@TVP",                            SqlDbType = SqlDbType.Structured,                            Value = GetDataTableParamNew(CANewReport)                        });                        //File.AppendAllText(strCurrentPath + @"\test.txt", "Now about to insert report " + reportID + " records into db " + "\r\n");                        try                        {                            commNew.CommandTimeout = 300;                            commNew.ExecuteNonQuery();                        }                        catch (Exception ex)                        {                            //Logger.Error("Execute Procedure 'sp_merarpt_create' Failed, Error Message : '" + ex.Message + "'.");                        }                        finally                        {                            commNew.Dispose();                            if (commNew != null)                            {                                connNew.Close();                                connNew.Dispose();                            }                        }

 

2 : 被调用的存储过程 , 原来的代码是 :

USE [Smartbilling_AI]GO/****** Object:  StoredProcedure [dbo].[sp_catcher_MeraRptCAV_Insert_detail]    Script Date: 10/29/2014 09:28:39 ******/SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOALTER PROCEDURE [dbo].[sp_catcher_MeraRptCAV_Insert_detail](	@TVP dbo.MeraRpt_CAV_AI READONLY)ASBEGINdeclare @reportid as int	SET NOCOUNT ON;        INSERT INTO MeraRpt_Detail_ByPrefix        (		[reportID]		,[Customer]		,[Prefix]		,[Route]		,[ASRSuccessCalls]		,[ACDSuccessCalls]		,[TotalCalls]		,[TotalMins]		,[ASR]		,[ACD]		,[Fee]		,[Cost]		,[Profit]	)	SELECT [reportID]		,[Customer]		,[Area]		,[Vendor]				,[ASRsuccessCalls]		,[ACDsuccessCalls]		,[totalCalls]		,[totalMins]				,[ASR]		,[ACD]		,[Fee]		,[Cost]		,[profix]			FROM @TVP tvp	select @reportid = max(reportid) from merarpt		--refresh area report	--exec MeraRpt_Refresh_Area 	--exec MeraRpt_Refresh_cr	--Update Report By Prefix		BEGIN TRY		exec [sp_i_Refresh_Cust_Prefix] @reportid	END TRY	BEGIN CATCH		insert capturelog 		(content) values ('[sp_i_Refresh_Cust_Prefix] Warning Code:' + cast (@@error as nvarchar) + ' Warning Lines: ' + Cast (ERROR_LINE() as nvarchar) + ' Warning Msg: '+ERROR_MESSAGE())	END CATCH		--Update Report By Prefix Hourly	BEGIN TRY		exec [sp_i_Refresh_Cust_Prefix_hour] @reportid	END TRY	BEGIN CATCH		insert capturelog 		(content) values ('[sp_i_Refresh_Cust_Prefix_hour] Warning Code:' + cast (@@error as nvarchar) + ' Warning Lines: ' + Cast (ERROR_LINE() as nvarchar) + ' Warning Msg: '+ERROR_MESSAGE())	END CATCH	----Update Report By Area	BEGIN TRY		exec [sp_i_Refresh_Cust_Area] @reportid	END TRY	BEGIN CATCH		insert capturelog 		(content) values ('[sp_i_Refresh_Cust_Area] Warning Code:' + cast (@@error as nvarchar) + ' Warning Lines: ' + Cast (ERROR_LINE() as nvarchar) + ' Warning Msg: '+ERROR_MESSAGE())	END CATCH	----Update Report By Area Hourly	BEGIN TRY		exec [sp_i_Refresh_Cust_Area_Hour] @reportid	END TRY	BEGIN CATCH		insert capturelog 		(content) values ('[sp_i_Refresh_Cust_Area_Hour] Warning Code:' + cast (@@error as nvarchar) + ' Warning Lines: ' + Cast (ERROR_LINE() as nvarchar) + ' Warning Msg: '+ERROR_MESSAGE())	END CATCH	----Update Report By Area Route	BEGIN TRY		exec [sp_i_Refresh_Cust_Area_Route] @reportid	END TRY	BEGIN CATCH		insert capturelog 		(content) values ('[sp_i_Refresh_Cust_Area_Route] Warning Code:' + cast (@@error as nvarchar) + ' Warning Lines: ' + Cast (ERROR_LINE() as nvarchar) + ' Warning Msg: '+ERROR_MESSAGE())	END CATCH    --以下是 vendor 部分 	BEGIN TRY		exec [sp_i_Refresh_Vendor_Prefix] @reportid 	END TRY	BEGIN CATCH		insert capturelog 		(content) values ('[sp_i_Refresh_Vendor_Prefix] Warning Code:' + cast (@@error as nvarchar) + ' Warning Lines: ' + Cast (ERROR_LINE() as nvarchar) + ' Warning Msg: '+ERROR_MESSAGE())	END CATCH	BEGIN TRY		exec [sp_i_Refresh_Vendor_Prefix_hour] @reportid	END TRY	BEGIN CATCH		insert capturelog 		(content) values ('[sp_i_Refresh_Vendor_Prefix_hour] Warning Code:' + cast (@@error as nvarchar) + ' Warning Lines: ' + Cast (ERROR_LINE() as nvarchar) + ' Warning Msg: '+ERROR_MESSAGE())	END CATCH	BEGIN TRY		exec [sp_i_Refresh_Vendor_Area] @reportid   	END TRY	BEGIN CATCH		insert capturelog 		(content) values ('[sp_i_Refresh_Vendor_Area] Warning Code:' + cast (@@error as nvarchar) + ' Warning Lines: ' + Cast (ERROR_LINE() as nvarchar) + ' Warning Msg: '+ERROR_MESSAGE())	END CATCH	BEGIN TRY		exec [sp_i_Refresh_Vendor_Area_hour] @reportid	END TRY	BEGIN CATCH		insert capturelog 		(content) values ('[sp_i_Refresh_Vendor_Area_hour] Warning Code:' + cast (@@error as nvarchar) + ' Warning Lines: ' + Cast (ERROR_LINE() as nvarchar) + ' Warning Msg: '+ERROR_MESSAGE())	END CATCH			BEGIN TRY		exec [sp_i_Refresh_Vendor_Area_Route] @reportid	END TRY	BEGIN CATCH		insert capturelog 		(content) values ('[sp_i_Refresh_Vendor_Area_Route] Warning Code:' + cast (@@error as nvarchar) + ' Warning Lines: ' + Cast (ERROR_LINE() as nvarchar) + ' Warning Msg: '+ERROR_MESSAGE())	END CATCH	    	update merarpt set FinishProcessedTime = getdate() where reportid = @reportidEND

 注意里面有若干处 调用其它存储过程 , just like

 

BEGIN TRY		exec [sp_i_Refresh_Vendor_Prefix] @reportid 	END TRY	BEGIN CATCH		insert capturelog 		(content) values ('[sp_i_Refresh_Vendor_Prefix] Warning Code:' + cast (@@error as nvarchar) + ' Warning Lines: ' + Cast (ERROR_LINE() as nvarchar) + ' Warning Msg: '+ERROR_MESSAGE())	END CATCH

 

3 : 然后c#程序运行的很慢,但奇怪的是, 如果在sql server management studio 里单独运行这个存储过程, 速度又很快 ,

 

4 : 找不到问题的原因 , 后来是把 所有在存储过程被调用的存储过程的代码都取出来, 直接写在 主存储过程里, 而不再间接调用, 这样问题得到了解决,但是,其中原因何在, 还不清楚, 暂时记在这里。

 

转载于:https://www.cnblogs.com/lthxk-yl/p/4059528.html

你可能感兴趣的文章
一步一步写算法(之hash表)
查看>>
漫谈并发编程(一) - 并发简单介绍
查看>>
JDBC连接MySQL数据库及演示样例
查看>>
Beta 冲刺(1/7)
查看>>
修改 Vultr 登录密码
查看>>
CSS学习
查看>>
Centos 安装lnmp完整版
查看>>
【转】Eclipse和PyDev搭建完美Python开发环境(Ubuntu篇)
查看>>
redis安装和配置
查看>>
2016424王启元 Exp5 msf基础应用
查看>>
Differences between page and segment
查看>>
Jdk与Tomcat配置与安装
查看>>
关于一个Java web与JFrame的深度结合
查看>>
VB连数据库conn.open的参数
查看>>
《信息安全系统设计基础》实验三
查看>>
SpringBoot Docs
查看>>
解决sublime text 2总是在新窗口中打开文件(标签中打开)
查看>>
VUE AntDesign DatePicker设置默认显示当前日期
查看>>
WIN32窗口模板
查看>>
859. Buddy Strings - LeetCode
查看>>