利用存储过程来提高数据库的更新问题
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); } #endregion3.调用存储过程其中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]
相关文章推荐
- 利用存储过程来提高数据库的更新问题
- 利用存储过程来提高数据库的更新问题
- 利用反射传输存储过程参数,在mssql和mysql两种数据库中存在的问题
- 创建数据库存储过程每天计划任务更新前台数据字段是否到期提醒
- sql server 脚本创建备份数据库的存储过程及利用前述存储过程自动备份数据库的作业
- c#关于数据库自定义类型在存储过程中返回服务器端的问题
- sqlserver2005利用临时表和@@RowCount提高分页查询存储过程性能示例分享
- SQL 数据库中的存储过程的参数问题(case when)
- 利用Java存储过程简化数据库操作
- 使用复制存储过程执行解决“事务复制中的表大量更新导致无法及时同步”的问题
- 项目问题-------传入存储过程中的参数的长度一定要和数据库表的字段长度保持一直
- mysql利用存储过程实现对数据库数据的迁移
- 利用Java存储过程简化数据库操作
- 利用mysql存储过程循环更新会员
- 利用SQL语句查找某数据库中所有存储过程包含的内容
- 利用Java存储过程简化数据库操作
- 利用存储过程来消除数据库中冗余的数据
- 利用数据库存储过程来实现分页功能
- 为提高存储过程效率应该注意的问题
- 利用SQL语句查找某数据库中所有存储过程包含的内容(转)