Adil15
Adil15

Reputation: 435

Dynamic SQL generation is not supported against multiple base tables in C#

The issue is that after I use my stored procedure below I try to use an update command to update the data, that is where I get the

Dynamic SQL generation is not supported against multiple base tables.

I have narrowed it down where its the join statement in my code below that is giving me the issue but I am unsure of how to fix it.

Here is my code:

USE [MSW]
GO
/****** Object:  StoredProcedure [dbo].[sp_Get_CSF_Transactions_MTPT]    Script Date: 10/22/2020 3:08:59 PM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:      <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
ALTER PROCEDURE [dbo].[sp_Get_CSF_Transactions_MTPT]

AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;

    -- Insert statements for procedure here
    SELECT  DISTINCT  EOD_CSF_Archive.ID, EOD_CSF_Archive.RecID, EOD_CSF_Archive.mercid, EOD_CSF_Archive.termid, EOD_CSF_Archive.proccode, EOD_CSF_Archive.trandt, EOD_CSF_Archive.trantm, EOD_CSF_Archive.pan, EOD_CSF_Archive.tranamt, EOD_CSF_Archive.trandbcr, EOD_CSF_Archive.tranrc, EOD_CSF_Archive.merccurr, EOD_CSF_Archive.customer, EOD_CSF_Archive.wkiv,
                      EOD_CSF_Archive.Merc_Settled, EOD_CSF_Archive.Proc_Date_Merc_Settled, EOD_CSF_Archive.DataWarehouse, EOD_CSF_Archive.DataWarehouseDate, EOD_CSF_Archive.TransactionIdentifier, EOD_CSF_Archive.network, EOD_CSF_Archive.ProdDesc, EOD_CSF_Archive.tranauth, EOD_CSF_Archive.transeq, EOD_Mr_Payments.AccountNumber
    FROM         EOD_CSF_Archive
    JOIN EOD_Mr_Payments on EOD_CSF_Archive.EntryID = EOD_Mr_Payments.EntryID
    WHERE  (EOD_CSF_Archive.DataWarehouse = 0 OR EOD_CSF_Archive.DataWarehouse IS NULL) and Merc_Settled = 1
    ORDER BY mercid, termid
END

Here is my code in C#:

public void Build_MTPT_File()
{
    string fname = string.Format("{0}_{1}.INT", "MTPT", Proc_Date_YYYYMMDD);
    LogToFile.WriteLog(string.Format("Building: {0}", fname));
    string fpath = string.Format("{0}{1}", ArcDir, fname);

    ExcryptProvider exp = new ExcryptProvider(true);

    using (SqlConnection cn = new SqlConnection(AppSettings.MSWConnString))
    {
        DataTable dt = new DataTable();
        
        using (SqlDataAdapter daReproc = new SqlDataAdapter("sp_Get_CSF_Transactions_MTPT", cn))
        {
            
            SqlCommandBuilder cmdBldr = new SqlCommandBuilder(daReproc);
            daReproc.SelectCommand.CommandTimeout = 1000;
            daReproc.SelectCommand.CommandType = CommandType.StoredProcedure;
            daReproc.Fill(dt);
            StringBuilder sb = new StringBuilder();
           
            foreach (DataRow row in dt.Rows)
            {
                var ProdDesc1 = row["ProdDesc"].ToString();
                var ProdDesc2 = ProdDesc1.Split('-');
                var OnUs = "O";
                var NotOnUs = "N";
                var EmptyRow = new string(' ', 5);

                sb.Append(row["MercID"].ToString().Trim().PadRight(15, ' '));
                sb.Append(row["MercID"].ToString().Trim().PadRight(15, ' '));
                sb.Append(row["TermID"].ToString().Trim().PadRight(8, ' '));
                sb.Append(row["proccode"].ToString().Trim().PadLeft(6, '0'));
                sb.Append(row["tranDbCr"].ToString().Trim().PadRight(1, ' '));
                sb.Append(row["MERCCURR"].ToString().Trim().PadLeft(3, '0'));
                sb.Append(row["tranamt"].ToString().Trim().PadLeft(15, '0'));
                try
                {
                    sb.Append(Convert.ToDateTime(row["Proc_Date_Merc_Settled"]).ToString("yyyyMMdd"));
                }
                catch
                {
                    sb.Append("00000000");
                }
                sb.Append(row["trandt"].ToString().Trim().PadLeft(8, ' '));
                sb.Append(row["trantm"].ToString().Trim().PadLeft(6, ' '));
                //LogToFile.WriteLog(row["id"].ToString().Trim());
                string tmppan = exp.DecryptASCIICBC(AppSettings.DEK, row["wkiv"].ToString().Trim(), row["customer"].ToString().Trim());
                if (tmppan.Length >= 9)
                {
                    sb.Append(tmppan.Trim().Substring(0, 9).PadRight(19, ' '));
                }
                else
                {
                    sb.Append(new string(' ', 19));
                }

                sb.Append(row["TransactionIdentifier"].ToString().Trim().PadRight(15, ' '));

                if (ProdDesc2.Length > 1)
                {
                    sb.Append(ProdDesc2[0].ToString().Trim().PadRight(15, ' '));
                    sb.Append(OnUs.ToString().Trim().PadRight(2, ' '));

                }
                else
                {
                    sb.Append(ProdDesc1.ToString().Trim().PadRight(15, ' '));
                    sb.Append(NotOnUs.ToString().Trim().PadRight(2, ' '));
                }
                sb.Append(row["tranauth"].ToString().Trim().PadRight(6, ' '));
                sb.Append(row["transeq"].ToString().Trim().PadRight(6, ' '));
                sb.Append(row["AccountNumber"].ToString().Trim().PadRight(16, ' '));

                sb.Append("\r\n");
                row["DataWarehouse"] = 1;
                row["DataWarehouseDate"] = DateTime.Now.ToString("yyyy-MM-dd 00:00:00");
            }
            WriteFile(fpath, sb.ToString());
            daReproc.Update(dt);
        }
    }
}

Any help would be greatly appreciated!

Upvotes: 0

Views: 147

Answers (0)

Related Questions