Search code examples
c#sql-servercrystal-reports

I am getting "Invalid mapping type value" this error while calling in c#


i created method to show my report then i give connectioninfo at runtime but when i connect to remote server i got error

 public bool ShowReport()
{
    try
    {
        //CrystalDecisions.CrystalReports.Engine.ReportDocument oRepDoc;
        //CrystalDecisions.Shared.TableLogOnInfo oLogInfo;
        //CrystalDecisions.CrystalReports.Engine.Table oTable;
        //CrystalDecisions.CrystalReports.Engine.FieldDefinition oField;
        //CrystalDecisions.CrystalReports.Engine.ParameterFieldDefinition oParamFieldDef;
        //CrystalDecisions.Shared.ParameterValues oParamValues;
        //CrystalDecisions.Shared.ParameterDiscreteValue oDiscretParamValue;
        //ParameterFields oParamList;
        //ParameterField oParamItem;

        if (!System.IO.File.Exists(ReportPath))
        {
            MessageBox.Show("ملف التقرير غير موجود فى المسار الصحيح", MainClass.ApplicationName, MessageBoxButtons.OK, MessageBoxIcon.Warning);
            return false;
        }
        else
        {
            oRepDoc = new ReportDocument();
            oLogInfo = new TableLogOnInfo();
            Tables t;
            oRepDoc.Load(ReportPath, OpenReportMethod.OpenReportByTempCopy);
            //***********************************************************************************

            ConnectionInfo connection = new ConnectionInfo();
            if (MainClass.IntegratedSecurity) connection.IntegratedSecurity = true;
            else
            {

                connection.IntegratedSecurity = false;
                connection.UserID = MainClass.UserId;
                connection.Password = MainClass.Password;
            }
            connection.ServerName = MainClass.ServerName;
            connection.DatabaseName = MainClass.DatabaseName;
             t= oRepDoc.Database.Tables;
             foreach (CrystalDecisions.CrystalReports.Engine.Table oTab in t)
            {
                oLogInfo = oTab.LogOnInfo;
                oLogInfo.ConnectionInfo = connection;

                oTab.ApplyLogOnInfo(oLogInfo);

                //oLogInfo = null;
            }

            //***********************************************************************************

            oRepDoc.Refresh();
            oRepDoc.VerifyDatabase(); // Very Important Line
            //***********************************************************************************
            // First Way To Pass Report Parameters Value
            foreach (Range oRange in oRangeList)
            {
                oRepDoc.SetParameterValue(oRange.RangeName, oRange.RangeValue);
            }
            oRangeList.Clear();
            //***********************************************************************************
            // Second Way To Pass Report Parameters Value
            //ParameterValues oCurrentParameterValues;
            //ParameterDiscreteValue oParameterDiscreteValue;
            //CrystalDecisions.CrystalReports.Engine.ParameterFieldDefinitions oParameterFieldDefinitions = oRepDoc.DataDefinition.ParameterFields;
            //foreach (Range oRange in oRangeList)
            //{
            //    oCurrentParameterValues = new ParameterValues();
            //    oParameterDiscreteValue = new ParameterDiscreteValue();
            //    oParameterDiscreteValue.Value = oRange.RangeValue;
            //    oCurrentParameterValues.Add(oParameterDiscreteValue);
            //    ParameterFieldDefinition oParameterFieldDefinition = oParameterFieldDefinitions[oRange.RangeName];
            //    oParameterFieldDefinition.ApplyCurrentValues(oCurrentParameterValues);
            //}
            //oRangeList.Clear();
            //***********************************************************************************
            // Pass "Company Name" And "Telephone" And "Printed By"  To Report
            FormulaFieldDefinition oFormulaFieldDefinition;
            FormulaFieldDefinitions oFormulaFieldDefinitions = oRepDoc.DataDefinition.FormulaFields;

            oFormulaFieldDefinition = oFormulaFieldDefinitions["For_CompanyName"];
            oFormulaFieldDefinition.Text = string.Format("\"{0}\"", MainClass.CompanyName);
            oFormulaFieldDefinition = oFormulaFieldDefinitions["For_CompanyTel"];
            oFormulaFieldDefinition.Text = string.Format("\"{0}\"", MainClass.CompanyTel);
            oFormulaFieldDefinition = oFormulaFieldDefinitions["For_PrintedBy"];
            oFormulaFieldDefinition.Text = string.Format("\"{0}\"", MainClass.GetUserName(MainClass.SystemUserId));
            //***********************************************************************************
        }
        if (Destination == ReportDestination.Printer)
        {
            oRepDoc.PrintOptions.PrinterName = PrinterName;
            oRepDoc.PrintToPrinter(NumberofCopies, Collate, StartPage, EndPage);
            return true;
        }
        return true;
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message, MainClass.ApplicationName, MessageBoxButtons.OK, MessageBoxIcon.Warning);
        return false;
    }
}

when depugging oRepDoc.VerifyDatabase(); i got error invalid mapping by the way connectioninfo works on sql server


Solution

  • Tim Vasil, from this thread on MSDN, says he resolved this error by installing Microsoft SQL Server Native Client on the server machine that was being connected to.

    http://social.msdn.microsoft.com/forums/en-US/vscrystalreports/thread/3c8db743-f1fb-4021-bf46-f6aee8889932

    Here are some links on how to install the Microsoft SQL Server Native Client:

    http://msdn.microsoft.com/en-us/library/ms131321.aspx

    http://msdn.microsoft.com/en-us/sqlserver/ff658532