您的位置:首页 > 数据库

利用存储过程来提高数据库的更新问题

2013-07-10 15:42 323 查看
1.创建存储过程,DELIMITER//useprotocoldb//dropprocedureifexistssp_protocol_Update//createproceduresp_protocol_Update(inp_ProtocolNodeUIDvarchar(64),inp_VersionUIDvarchar(64),inp_ParentProtocolNodeUIDvarchar(64),inp_IsDefaultSelectedTINYINT(1),inp_SequenceOrderINT(11),inp_NodeTypeCHAR(50),inp_NodeKeyvarchar(64),inp_NodeLabelvarchar(200),inp_ExamedBodyPartvarchar(200),inp_ScanTypeSupportedCHAR(50),inp_PatientPositionCHAR(50),inp_PrivateProtocolFilePathvarchar(1024),inp_Descriptionvarchar(1024),inp_LeftRightFlagCHAR(50),inp_AgeGroupCHAR(50),inp_FileVersionNumbervarchar(64),inp_ExampleFigurePathvarchar(1024),inp_PatientTypeIDvarchar(64),inp_ProcedureIDvarchar(64),inp_PSASIDvarchar(64),inp_ProtocolIDvarchar(64),inp_IsFavouriteTINYINT(1),inp_IsTimedTINYINT(1),inp_IsFactoryPredefineTINYINT(1),inp_IsNeedInjectionTINYINT(1),inp_IsLicensedTINYINT(1),inp_IsCardicScanTINYINT(1),inp_IsPediatricTINYINT(1),inp_CreateDateDATETIME,inp_CreateByvarchar(64),inp_UpdateDateDATETIME,inp_UpdateByvarchar(64))beginupdateprotocolnodesetVersionUID=p_VersionUID,ParentProtocolNodeUID=p_ParentProtocolNodeUID,IsDefaultSelected=p_IsDefaultSelected,SequenceOrder=p_SequenceOrder,NodeType=p_NodeType,NodeKey=p_NodeKey,NodeLabel=p_NodeLabel,ExamedBodyPart=p_ExamedBodyPart,ScanTypeSupported=p_ScanTypeSupported,PatientPosition=p_PatientPosition,PrivateProtocolFilePath=p_PrivateProtocolFilePath,Description=p_Description,LeftRightFlag=p_LeftRightFlag,AgeGroup=p_AgeGroup,FileVersionNumber=p_FileVersionNumber,ExampleFigurePath=p_ExampleFigurePath,PatientTypeID=p_PatientTypeID,ProcedureID=p_ProcedureID,PSASID=p_PSASID,ProtocolID=p_ProtocolID,IsFavourite=p_IsFavourite,IsTimed=p_IsTimed,IsFactoryPredefine=p_IsFactoryPredefine,IsNeedInjection=p_IsNeedInjection,IsLicensed=p_IsLicensed,IsCardicScan=p_IsCardicScan,IsPediatric=p_IsPediatric,CreateDate=p_CreateDate,CreateBy=p_CreateBy,UpdateDate=p_UpdateDate,UpdateBy=p_UpdateBywhereProtocolNodeUID=p_ProtocolNodeUID;end//DELIMITER;2.用EF映射存储过程在ModelView里选择FunctionImport,添加存储过程的映射方法。如XXX.Designer.cs里的
#regionFunctionImports

///<summary>
///NoMetadataDocumentationavailable.
///</summary>
///<paramname="p_ProtocolNodeUID">NoMetadataDocumentationavailable.</param>
///<paramname="p_VersionUID">NoMetadataDocumentationavailable.</param>
///<paramname="p_ParentProtocolNodeUID">NoMetadataDocumentationavailable.</param>
///<paramname="p_IsDefaultSelected">NoMetadataDocumentationavailable.</param>
///<paramname="p_SequenceOrder">NoMetadataDocumentationavailable.</param>
///<paramname="p_NodeType">NoMetadataDocumentationavailable.</param>
///<paramname="p_NodeKey">NoMetadataDocumentationavailable.</param>
///<paramname="p_NodeLabel">NoMetadataDocumentationavailable.</param>
///<paramname="p_ExamedBodyPart">NoMetadataDocumentationavailable.</param>
///<paramname="p_ScanTypeSupported">NoMetadataDocumentationavailable.</param>
///<paramname="p_PatientPosition">NoMetadataDocumentationavailable.</param>
///<paramname="p_PrivateProtocolFilePath">NoMetadataDocumentationavailable.</param>
///<paramname="p_Description">NoMetadataDocumentationavailable.</param>
///<paramname="p_LeftRightFlag">NoMetadataDocumentationavailable.</param>
///<paramname="p_AgeGroup">NoMetadataDocumentationavailable.</param>
///<paramname="p_FileVersionNumber">NoMetadataDocumentationavailable.</param>
///<paramname="p_ExampleFigurePath">NoMetadataDocumentationavailable.</param>
///<paramname="p_PatientTypeID">NoMetadataDocumentationavailable.</param>
///<paramname="p_ProcedureID">NoMetadataDocumentationavailable.</param>
///<paramname="p_PSASID">NoMetadataDocumentationavailable.</param>
///<paramname="p_ProtocolID">NoMetadataDocumentationavailable.</param>
///<paramname="p_IsFavourite">NoMetadataDocumentationavailable.</param>
///<paramname="p_IsTimed">NoMetadataDocumentationavailable.</param>
///<paramname="p_IsFactoryPredefine">NoMetadataDocumentationavailable.</param>
///<paramname="p_IsNeedInjection">NoMetadataDocumentationavailable.</param>
///<paramname="p_IsLicensed">NoMetadataDocumentationavailable.</param>
///<paramname="p_IsCardicScan">NoMetadataDocumentationavailable.</param>
///<paramname="p_IsPediatric">NoMetadataDocumentationavailable.</param>
///<paramname="p_CreateDate">NoMetadataDocumentationavailable.</param>
///<paramname="p_CreateBy">NoMetadataDocumentationavailable.</param>
///<paramname="p_UpdateDate">NoMetadataDocumentationavailable.</param>
///<paramname="p_UpdateBy">NoMetadataDocumentationavailable.</param>
publicintsp_protocol_Update(global::System.Stringp_ProtocolNodeUID,global::System.Stringp_VersionUID,global::System.Stringp_ParentProtocolNodeUID,Nullable<global::System.SByte>p_IsDefaultSelected,Nullable<global::System.Int32>p_SequenceOrder,global::System.Stringp_NodeType,global::System.Stringp_NodeKey,global::System.Stringp_NodeLabel,global::System.Stringp_ExamedBodyPart,global::System.Stringp_ScanTypeSupported,global::System.Stringp_PatientPosition,global::System.Stringp_PrivateProtocolFilePath,global::System.Stringp_Description,global::System.Stringp_LeftRightFlag,global::System.Stringp_AgeGroup,global::System.Stringp_FileVersionNumber,global::System.Stringp_ExampleFigurePath,global::System.Stringp_PatientTypeID,global::System.Stringp_ProcedureID,global::System.Stringp_PSASID,global::System.Stringp_ProtocolID,Nullable<global::System.SByte>p_IsFavourite,Nullable<global::System.SByte>p_IsTimed,Nullable<global::System.SByte>p_IsFactoryPredefine,Nullable<global::System.SByte>p_IsNeedInjection,Nullable<global::System.SByte>p_IsLicensed,Nullable<global::System.SByte>p_IsCardicScan,Nullable<global::System.SByte>p_IsPediatric,Nullable<global::System.DateTime>p_CreateDate,global::System.Stringp_CreateBy,Nullable<global::System.DateTime>p_UpdateDate,global::System.Stringp_UpdateBy)
{
ObjectParameterp_ProtocolNodeUIDParameter;
if(p_ProtocolNodeUID!=null)
{
p_ProtocolNodeUIDParameter=newObjectParameter("p_ProtocolNodeUID",p_ProtocolNodeUID);
}
else
{
p_ProtocolNodeUIDParameter=newObjectParameter("p_ProtocolNodeUID",typeof(global::System.String));
}

ObjectParameterp_VersionUIDParameter;
if(p_VersionUID!=null)
{
p_VersionUIDParameter=newObjectParameter("p_VersionUID",p_VersionUID);
}
else
{
p_VersionUIDParameter=newObjectParameter("p_VersionUID",typeof(global::System.String));
}

ObjectParameterp_ParentProtocolNodeUIDParameter;
if(p_ParentProtocolNodeUID!=null)
{
p_ParentProtocolNodeUIDParameter=newObjectParameter("p_ParentProtocolNodeUID",p_ParentProtocolNodeUID);
}
else
{
p_ParentProtocolNodeUIDParameter=newObjectParameter("p_ParentProtocolNodeUID",typeof(global::System.String));
}

ObjectParameterp_IsDefaultSelectedParameter;
if(p_IsDefaultSelected.HasValue)
{
p_IsDefaultSelectedParameter=newObjectParameter("p_IsDefaultSelected",p_IsDefaultSelected);
}
else
{
p_IsDefaultSelectedParameter=newObjectParameter("p_IsDefaultSelected",typeof(global::System.SByte));
}

ObjectParameterp_SequenceOrderParameter;
if(p_SequenceOrder.HasValue)
{
p_SequenceOrderParameter=newObjectParameter("p_SequenceOrder",p_SequenceOrder);
}
else
{
p_SequenceOrderParameter=newObjectParameter("p_SequenceOrder",typeof(global::System.Int32));
}

ObjectParameterp_NodeTypeParameter;
if(p_NodeType!=null)
{
p_NodeTypeParameter=newObjectParameter("p_NodeType",p_NodeType);
}
else
{
p_NodeTypeParameter=newObjectParameter("p_NodeType",typeof(global::System.String));
}

ObjectParameterp_NodeKeyParameter;
if(p_NodeKey!=null)
{
p_NodeKeyParameter=newObjectParameter("p_NodeKey",p_NodeKey);
}
else
{
p_NodeKeyParameter=newObjectParameter("p_NodeKey",typeof(global::System.String));
}

ObjectParameterp_NodeLabelParameter;
if(p_NodeLabel!=null)
{
p_NodeLabelParameter=newObjectParameter("p_NodeLabel",p_NodeLabel);
}
else
{
p_NodeLabelParameter=newObjectParameter("p_NodeLabel",typeof(global::System.String));
}

ObjectParameterp_ExamedBodyPartParameter;
if(p_ExamedBodyPart!=null)
{
p_ExamedBodyPartParameter=newObjectParameter("p_ExamedBodyPart",p_ExamedBodyPart);
}
else
{
p_ExamedBodyPartParameter=newObjectParameter("p_ExamedBodyPart",typeof(global::System.String));
}

ObjectParameterp_ScanTypeSupportedParameter;
if(p_ScanTypeSupported!=null)
{
p_ScanTypeSupportedParameter=newObjectParameter("p_ScanTypeSupported",p_ScanTypeSupported);
}
else
{
p_ScanTypeSupportedParameter=newObjectParameter("p_ScanTypeSupported",typeof(global::System.String));
}

ObjectParameterp_PatientPositionParameter;
if(p_PatientPosition!=null)
{
p_PatientPositionParameter=newObjectParameter("p_PatientPosition",p_PatientPosition);
}
else
{
p_PatientPositionParameter=newObjectParameter("p_PatientPosition",typeof(global::System.String));
}

ObjectParameterp_PrivateProtocolFilePathParameter;
if(p_PrivateProtocolFilePath!=null)
{
p_PrivateProtocolFilePathParameter=newObjectParameter("p_PrivateProtocolFilePath",p_PrivateProtocolFilePath);
}
else
{
p_PrivateProtocolFilePathParameter=newObjectParameter("p_PrivateProtocolFilePath",typeof(global::System.String));
}

ObjectParameterp_DescriptionParameter;
if(p_Description!=null)
{
p_DescriptionParameter=newObjectParameter("p_Description",p_Description);
}
else
{
p_DescriptionParameter=newObjectParameter("p_Description",typeof(global::System.String));
}

ObjectParameterp_LeftRightFlagParameter;
if(p_LeftRightFlag!=null)
{
p_LeftRightFlagParameter=newObjectParameter("p_LeftRightFlag",p_LeftRightFlag);
}
else
{
p_LeftRightFlagParameter=newObjectParameter("p_LeftRightFlag",typeof(global::System.String));
}

ObjectParameterp_AgeGroupParameter;
if(p_AgeGroup!=null)
{
p_AgeGroupParameter=newObjectParameter("p_AgeGroup",p_AgeGroup);
}
else
{
p_AgeGroupParameter=newObjectParameter("p_AgeGroup",typeof(global::System.String));
}

ObjectParameterp_FileVersionNumberParameter;
if(p_FileVersionNumber!=null)
{
p_FileVersionNumberParameter=newObjectParameter("p_FileVersionNumber",p_FileVersionNumber);
}
else
{
p_FileVersionNumberParameter=newObjectParameter("p_FileVersionNumber",typeof(global::System.String));
}

ObjectParameterp_ExampleFigurePathParameter;
if(p_ExampleFigurePath!=null)
{
p_ExampleFigurePathParameter=newObjectParameter("p_ExampleFigurePath",p_ExampleFigurePath);
}
else
{
p_ExampleFigurePathParameter=newObjectParameter("p_ExampleFigurePath",typeof(global::System.String));
}

ObjectParameterp_PatientTypeIDParameter;
if(p_PatientTypeID!=null)
{
p_PatientTypeIDParameter=newObjectParameter("p_PatientTypeID",p_PatientTypeID);
}
else
{
p_PatientTypeIDParameter=newObjectParameter("p_PatientTypeID",typeof(global::System.String));
}

ObjectParameterp_ProcedureIDParameter;
if(p_ProcedureID!=null)
{
p_ProcedureIDParameter=newObjectParameter("p_ProcedureID",p_ProcedureID);
}
else
{
p_ProcedureIDParameter=newObjectParameter("p_ProcedureID",typeof(global::System.String));
}

ObjectParameterp_PSASIDParameter;
if(p_PSASID!=null)
{
p_PSASIDParameter=newObjectParameter("p_PSASID",p_PSASID);
}
else
{
p_PSASIDParameter=newObjectParameter("p_PSASID",typeof(global::System.String));
}

ObjectParameterp_ProtocolIDParameter;
if(p_ProtocolID!=null)
{
p_ProtocolIDParameter=newObjectParameter("p_ProtocolID",p_ProtocolID);
}
else
{
p_ProtocolIDParameter=newObjectParameter("p_ProtocolID",typeof(global::System.String));
}

ObjectParameterp_IsFavouriteParameter;
if(p_IsFavourite.HasValue)
{
p_IsFavouriteParameter=newObjectParameter("p_IsFavourite",p_IsFavourite);
}
else
{
p_IsFavouriteParameter=newObjectParameter("p_IsFavourite",typeof(global::System.SByte));
}

ObjectParameterp_IsTimedParameter;
if(p_IsTimed.HasValue)
{
p_IsTimedParameter=newObjectParameter("p_IsTimed",p_IsTimed);
}
else
{
p_IsTimedParameter=newObjectParameter("p_IsTimed",typeof(global::System.SByte));
}

ObjectParameterp_IsFactoryPredefineParameter;
if(p_IsFactoryPredefine.HasValue)
{
p_IsFactoryPredefineParameter=newObjectParameter("p_IsFactoryPredefine",p_IsFactoryPredefine);
}
else
{
p_IsFactoryPredefineParameter=newObjectParameter("p_IsFactoryPredefine",typeof(global::System.SByte));
}

ObjectParameterp_IsNeedInjectionParameter;
if(p_IsNeedInjection.HasValue)
{
p_IsNeedInjectionParameter=newObjectParameter("p_IsNeedInjection",p_IsNeedInjection);
}
else
{
p_IsNeedInjectionParameter=newObjectParameter("p_IsNeedInjection",typeof(global::System.SByte));
}

ObjectParameterp_IsLicensedParameter;
if(p_IsLicensed.HasValue)
{
p_IsLicensedParameter=newObjectParameter("p_IsLicensed",p_IsLicensed);
}
else
{
p_IsLicensedParameter=newObjectParameter("p_IsLicensed",typeof(global::System.SByte));
}

ObjectParameterp_IsCardicScanParameter;
if(p_IsCardicScan.HasValue)
{
p_IsCardicScanParameter=newObjectParameter("p_IsCardicScan",p_IsCardicScan);
}
else
{
p_IsCardicScanParameter=newObjectParameter("p_IsCardicScan",typeof(global::System.SByte));
}

ObjectParameterp_IsPediatricParameter;
if(p_IsPediatric.HasValue)
{
p_IsPediatricParameter=newObjectParameter("p_IsPediatric",p_IsPediatric);
}
else
{
p_IsPediatricParameter=newObjectParameter("p_IsPediatric",typeof(global::System.SByte));
}

ObjectParameterp_CreateDateParameter;
if(p_CreateDate.HasValue)
{
p_CreateDateParameter=newObjectParameter("p_CreateDate",p_CreateDate);
}
else
{
p_CreateDateParameter=newObjectParameter("p_CreateDate",typeof(global::System.DateTime));
}

ObjectParameterp_CreateByParameter;
if(p_CreateBy!=null)
{
p_CreateByParameter=newObjectParameter("p_CreateBy",p_CreateBy);
}
else
{
p_CreateByParameter=newObjectParameter("p_CreateBy",typeof(global::System.String));
}

ObjectParameterp_UpdateDateParameter;
if(p_UpdateDate.HasValue)
{
p_UpdateDateParameter=newObjectParameter("p_UpdateDate",p_UpdateDate);
}
else
{
p_UpdateDateParameter=newObjectParameter("p_UpdateDate",typeof(global::System.DateTime));
}

ObjectParameterp_UpdateByParameter;
if(p_UpdateBy!=null)
{
p_UpdateByParameter=newObjectParameter("p_UpdateBy",p_UpdateBy);
}
else
{
p_UpdateByParameter=newObjectParameter("p_UpdateBy",typeof(global::System.String));
}

returnbase.ExecuteFunction("sp_protocol_Update",p_ProtocolNodeUIDParameter,p_VersionUIDParameter,p_ParentProtocolNodeUIDParameter,p_IsDefaultSelectedParameter,p_SequenceOrderParameter,p_NodeTypeParameter,p_NodeKeyParameter,p_NodeLabelParameter,p_ExamedBodyPartParameter,p_ScanTypeSupportedParameter,p_PatientPositionParameter,p_PrivateProtocolFilePathParameter,p_DescriptionParameter,p_LeftRightFlagParameter,p_AgeGroupParameter,p_FileVersionNumberParameter,p_ExampleFigurePathParameter,p_PatientTypeIDParameter,p_ProcedureIDParameter,p_PSASIDParameter,p_ProtocolIDParameter,p_IsFavouriteParameter,p_IsTimedParameter,p_IsFactoryPredefineParameter,p_IsNeedInjectionParameter,p_IsLicensedParameter,p_IsCardicScanParameter,p_IsPediatricParameter,p_CreateDateParameter,p_CreateByParameter,p_UpdateDateParameter,p_UpdateByParameter);
}

#endregion
3.调用存储过程其中protocolDB是一个entity对象,sp_protocol_Udpate是存储过程映射过来的方法名。
protocolDB.sp_protocol_Update(temp.ProtocolNodeUID,temp.VersionUID,temp.ParentProtocolNodeUID,Convert.ToSByte(temp.IsDefaultSelected),temp.SequenceOrder,temp.NodeType,temp.NodeKey,temp.NodeLabel,temp.ExamedBodyPart,temp.ScanTypeSupported,temp.PatientPosition,temp.PrivateProtocolFilePath,temp.Description,temp.LeftRightFlag,temp.AgeGroup,temp.FileVersionNumber,temp.ExampleFigurePath,temp.PatientTypeID,temp.ProcedureID,temp.PSASID,temp.ProtocolID,Convert.ToSByte(temp.IsFavourite),Convert.ToSByte(temp.IsTimed),Convert.ToSByte(temp.IsFactoryPredefine),Convert.ToSByte(temp.IsNeedInjection),Convert.ToSByte(temp.IsLicensed),Convert.ToSByte(temp.IsCardicScan),Convert.ToSByte(temp.IsPediatric),temp.CreateDate,temp.CreateBy,temp.UpdateDate,temp.UpdateBy);
4.注意事项
1)在调用存储过程方法时,有可能跑出一个异常:ThespecifiedFunctionImportisnotmappedtoastorefunctionandcannotbeexecuted.
解决办法,打开Modelview,选择对应的FunctionImport,然后右击delete,再次右击Add,填入方法名。
http://scottsdalewebstudio.com/blog/functionimport-is-not-mapped-to-a-store-function-error/
2)mysql的tinyint(1)数据类型在EF的存储过程参数中被映射为sbyte,但是EF中的对象却映射为bool。因此,在调用EF的存储过程方法时,需要转换。
其中temp是个表对象,IsPediatric是映射过来的bool变量,通过Convert.ToSByte完美转换。
Convert.ToSByte(temp.IsPediatric)
3)Mysql的存储过程示例,注意delimiter关键字。
下面是一个使用OUT参数的简单的存储程序的例子。例子为,在程序被定义的时候,用mysql客户端delimiter命令来把语句定界符从;变为//。这就允许用在程序体中的;定界符被传递到服务器而不是被mysql自己来解释。
mysql>delimiter//[/b]
mysql>CREATEPROCEDUREsimpleproc(OUTparam1INT)[/b]
->BEGIN[/b]
->SELECTCOUNT(*)INTOparam1FROMt;[/b]
->END[/b]
->//[/b]
QueryOK,0rowsaffected(0.00sec)
mysql>delimiter;[/b]

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