private void GenerateSpsPartial(DataAccessModel daLayer, SqlSpInfo info2, CSharpTypeDef typeDef) { if (info2.Name.Substring(0, 3) != "dt_") { string prefix = daLayer.Prefix; if ((prefix == string.Empty) || (prefix == info2.Name.Substring(0, prefix.Length))) { bool returnsDataSet = (info2.ResultColumns != null) || ((Sql2000DataAccessModel) daLayer).IsInDynamicSp(info2.Name); TraceInfoEvent.Raise(string.Format("Adding method for '{0}'", info2.Name)); GenerateSpMethod(typeDef, info2, true, returnsDataSet); GenerateSpMethod(typeDef, info2, false, returnsDataSet); } } }
private void GenerateSpMethod(CSharpTypeDef dcClass, SqlSpInfo spInfo, bool hasRetVal, bool returnsDataSet) { CSharpMethodDef def = new CSharpMethodDef(); dcClass.Methods.Add(def); def.Comment.Summary = string.Format("Calls stored procedure '{0}'", spInfo.Name); def.Attributes.Add(string.Format("ImplicitPmc(\"{0}\")", spInfo.Name)); if (returnsDataSet) { def.HeaderLine = string.Format("public DataSet {0}", spInfo.Name); def.Comment.Returns = "Resulting DataSet from the stored procedure."; } else { def.HeaderLine = string.Format("public void {0}", spInfo.Name); } foreach (SqlSpParamInfo info in spInfo.Parameters) { if (info.Direction != ParameterDirection.ReturnValue) { if (info.Direction == ParameterDirection.Output) { CSharpMethodparamDef def2 = new CSharpMethodparamDef(info.NormalName, SqlTypeMap.GetDBType(info.Type)); def2.Direction = MethodParamDir.Ref; def.Params.Add(def2); def.Comment.AddParam(info.NormalName, string.Format("{0} parameter.", info.Name)); } else { def.AddParam(info.NormalName, SqlTypeMap.GetDBType(info.Type), string.Format("{0} parameter.", info.Name)); } } } if (hasRetVal) { CSharpMethodparamDef def3 = new CSharpMethodparamDef("retVal", "int"); def3.Direction = MethodParamDir.Out; def.Params.Add(def3); def.Comment.AddParam("retVal", "SP return value."); } TextWriter writer = def.Writer; writer.WriteLine("TraceCallEnterEvent.Raise();"); writer.WriteLine("SqlCommand sqlComm = PrepareSPCall(\"[dbo].[{0}]\");", spInfo.Name); if (hasRetVal) { writer.WriteLine("SqlParameter returnValue = sqlComm.Parameters.Add(\"@RETURNVALUE\", SqlDbType.Int);"); writer.WriteLine("returnValue.Direction = ParameterDirection.ReturnValue;"); } int num = 1; foreach (SqlSpParamInfo info2 in spInfo.Parameters) { if (info2.Direction == ParameterDirection.ReturnValue) { continue; } writer.WriteLine(string.Format("SqlParameter p{0} = sqlComm.Parameters.Add(\"{1}\", {2});", num, info2.Name, info2.SqlParamTypeName)); if (info2.Direction == ParameterDirection.Output) { writer.WriteLine(string.Format("p{0}.Direction = ParameterDirection.Output;", num)); } else if (SqlTypeMap.GetDBType(info2.Type).ToLower() == "bool") { writer.WriteLine(string.Format("p{0}.Value = {1};", num, info2.NormalName)); } else if (SqlTypeMap.GetDBType(info2.Type).ToLower() == "dbdecimal") { writer.WriteLine(string.Format("p{0}.Precision = {1};", num, info2.Precision)); writer.WriteLine(string.Format("p{0}.Scale = {1};", num, info2.Scale)); writer.WriteLine(string.Format("p{0}.Value = {1};", num, info2.NormalName)); } else { writer.WriteLine(string.Format("p{0}.Value = {1}.Value;", num, info2.NormalName)); } num++; } writer.WriteLine("TraceDbCommandEvent.Raise(sqlComm);"); if (returnsDataSet) { writer.WriteLine("DataSet Result = new DataSet();"); } writer.WriteLine("try"); writer.WriteLine("{"); if (returnsDataSet) { writer.WriteLine(" SqlDataAdapter sqlAdapt = new SqlDataAdapter(sqlComm);"); writer.WriteLine(" sqlAdapt.Fill(Result);"); writer.WriteLine(" TraceCallReturnEvent.Raise();"); } else { writer.WriteLine(" sqlComm.ExecuteNonQuery();"); writer.WriteLine(" TraceCallReturnEvent.Raise();"); } writer.WriteLine("}"); writer.WriteLine("catch (SqlException e)"); writer.WriteLine("{"); writer.WriteLine(" TraceCallReturnEvent.Raise(false);"); writer.Write(" SqlErrorHandler.Handle(e, "); if (spInfo.Parameters.Count > 1) { writer.WriteLine(string.Format("{0}.ToString());", spInfo.Parameters[1].NormalName)); } else { writer.WriteLine("\"<unknown>\");"); } writer.WriteLine("}"); writer.WriteLine("finally"); writer.WriteLine("{"); writer.WriteLine(" FinishSPCall();"); writer.WriteLine("}"); num = 0; foreach (SqlSpParamInfo info3 in spInfo.Parameters) { if (info3.Direction == ParameterDirection.Output) { writer.WriteLine(string.Format("{0}.Value = p{1}.Value;", info3.NormalName, num)); } num++; } if (hasRetVal) { writer.WriteLine("retVal = (int)returnValue.Value;"); writer.WriteLine("TraceInfoEvent.Raise(\"RetVal: {0}\", retVal);"); } if (returnsDataSet) { writer.WriteLine("return Result;"); } }