您的位置:首页 > 数据库

C#中执行存储过程并在SQL server中调试

2017-03-24 10:47 387 查看

1.编写存储过程

if exists (select * from sysobjects where id = object_id(N'[sp_calcPci_of_baseRcd_GTmpTbl]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop PROCEDURE [dbo].[sp_calcPci_of_baseRcd_GTmpTbl]

CREATE PROCEDURE [dbo].[sp_calcPci_of_baseRcd_GTmpTbl]
--定义参数
@bdindexId INT ,
@groupId INT,
@disVal INT ,
@retVal INT OUTPUT,  -- 返回值
@routeType INT

--WITH ENCRYPTION -- 加密
AS
BEGIN
DECLARE @pciCalcRcdId0 INT
--执行另外一个存储过程,输出参数需带上关键字‘OUTPUT’
EXEC dbo.procGetCurNo 'PCA_T_D_PCICalcRcd', @pciCalcRcdId0 OUTPUT
IF( @pciCalcRcdId0 <= 0 )
BEGIN--sql中没有{},以BEGIN、END代替
SET @retVal = -5
RETURN -5;
END

SET @curSegIndex = 1;    --变量赋值
--为查询结果定义游标
DECLARE segListCursor CURSOR
FOR
SELECT section_code ,pav_type ,segment_code ,begin_mile ,end_mile ,segment_length, lane_width
FROM    dbo.ZY_T_D_Segment
WHERE   route_code = @routeCode AND up_down = @direction AND lane = @lane
AND begin_mile < @endMile AND end_mile > @beginMile AND valid_flag=1
ORDER BY begin_mile;
--打开游标
OPEN segListCursor;
--按行取值
FETCH NEXT FROM segListCursor INTO @sectionCode, @pavType,
@segmentCode, @segBeginMile, @segEndMile, @segLength, @laneWidth;
WHILE @@FETCH_STATUS = 0
BEGIN    --
---处理---
FETCH NEXT FROM segListCursor INTO @sectionCode,
@pavType, @segmentCode, @segBeginMile, @segEndMile,@segLength, @laneWidth;
END;
CLOSE segListCursor;--关闭游标
DEALLOCATE segListCursor;--释放游标 deallocate

-- 将临时表中的数据插入到实际表a_test中
SET @insertSql = 'INSERT INTO ' + @pavDataLocTable + ' SELECT * FROM ' + @tempPavDataLocTable
EXEC sys.sp_executesql @insertSql
SET @insertSql = 'INSERT INTO ' + @pciCalcTable + ' SELECT * FROM ' + @tempPciCalcTable
EXEC sys.sp_executesql @insertSql

DROP table [dbo].[##pavDataLoc_temp_table]
DROP table [dbo].[##pciCalc_temp_table]
END;
GO

 

2.C#中调用存储过程

SqlParameter dmgPara1 = new SqlParameter("@bdindexId", SqlDbType.Int, 4);
dmgPara1.Value = pciCalcRcd.BdindexId;
SqlParameter dmgPara2 = new SqlParameter("@groupId", SqlDbType.Int, 4);
dmgPara2.Value = pciCalcRcd.GroupId;
SqlParameter dmgPara3 = new SqlParameter("@disVal", SqlDbType.Int, 4);
dmgPara3.Value = pciCalcRcd.DisVal;
SqlParameter dmgPara4 = new SqlParameter("@retVal", SqlDbType.Int, 4);
dmgPara4.Value = 0;
dmgPara4.Direction = ParameterDirection.Output;//输出参数
SqlParameter dmgPara5 = new SqlParameter("@routeType", SqlDbType.Int, 4);
dmgPara5.Value = routeTypeVal;//道路等级,高速与一级公路为0,二三四级为1
SqlParameter[] sqlDmgParam = new SqlParameter[5];
sqlDmgParam[0] = dmgPara1;
sqlDmgParam[1] = dmgPara2;
sqlDmgParam[2] = dmgPara3;
sqlDmgParam[3] = dmgPara4;
sqlDmgParam[4] = dmgPara5;
// 根据病害,入库相应的路面破损数据
try
{
nRet = MsSqlTool.executeProcedureNoDataSet(conn, "sp_calcPci_of_baseRcd_GTmpTbl", sqlDmgParam);
}
catch (Exception ex)
{
}
if (int.Parse(sqlDmgParam[3].Value.ToString()) <= 0)
{
return int.Parse(sqlDmgParam[3].Value.ToString());//获取输出参数返回值
}
public static int executeProcedureNoDataSet(SqlConnection dbConn, string strProcName, SqlParameter[] procParams)
{
SqlConnection conn = dbConn;
DataSet ds = new DataSet();
try
{
if (conn.State != ConnectionState.Open)
conn.Open();

// 确认打开连接  Open();  
SqlCommand cmd = new SqlCommand(strProcName, dbConn);  
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandTimeout = 3600;
// 依次把参数传入存储过程 
if (procParams != null)  
{  
foreach (SqlParameter parameter in procParams)  
cmd.Parameters.Add(parameter);  
}   

cmd.ExecuteNonQuery();

return 1;
}
catch (System.Exception ex)
{
throw ex;
}
finally
{
conn.Close();
}
return 1;
}

3.SQL 调试存储过程

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: