Reputation: 435
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