Ich habe eine SQL-Anweisung, die ich in C# ausführen muss und müssen Parameter von C# -Code erhalten. Ich weiß, dass gespeicherte Prozeduren bevorzugt werden, um SQL-Injection zu vermeiden, aber ich versuche nur, dies in C# zu tun.C# temporäre gespeicherte Prozedur ausgeführt
Ich übersetze diese SQL in C#, aber ich habe einen Fehler gefunden, obwohl die Abfrage in SQL Server Management Studio funktioniert. Es nutzt temporär gespeicherte Prozedur und temporäre Tabelle unten:
-- 1.) Declare a criteria table which can be any number of rows
BEGIN TRY
DROP TABLE #CriteriaTable
END TRY
BEGIN CATCH
END CATCH
CREATE TABLE #CriteriaTable (ParameterCode VARCHAR(64), Value VARCHAR(64))
-- 2.) Declare a procedure to add criteria table
BEGIN TRY
DROP PROCEDURE #AddCriteriaTable
END TRY
BEGIN CATCH
END CATCH
go
CREATE PROCEDURE #AddCriteriaTable
(@ParameterCode VARCHAR(64), @Value VARCHAR(64))
AS
INSERT #CriteriaTable
VALUES(@ParameterCode, @Value)
GO
-- 3.) Do a computation which accesses the criteria
BEGIN TRY
DROP PROCEDURE #ComputeBasedOnCriteria
END TRY
BEGIN CATCH
END CATCH
go
CREATE PROCEDURE #ComputeBasedOnCriteria
(@product VARCHAR(36) = 'ABC',
@currency VARCHAR(3) = 'USD',
@zScore FLOAT = .845)
AS
-- Code inside this procedure is largely dynamic sql.
-- This is just a quick mock up
SELECT
@Product ProductCode,
@currency Currency,
950 ExpectedRevenue,
*
FROM
#CriteriaTable c
PIVOT
(min (Value) FOR ParameterCode IN
([MyParam1], MyParam2, MyParam3)
) AS pvt
GO
--End of code for Configuration table
-- Samples: Execute this to add criteria to the temporary table that will be used by #ComputeBasedOnCriteria
EXEC#AddCriteriaTable 'MyParam1', 'MyValue1'
EXEC#AddCriteriaTable 'MyParam2', 'MyValue3'
EXEC#AddCriteriaTable 'MyParam3', 'MyValue3'
--Execute the procedure that will return the results for the screen
EXEC#ComputeBasedOnCriteria
nun diesen in C# ich versuche, einen Fehler auf, wenn ich versuche, die #AddCriteriaTable
Prozedur auszuführen. Wenn ich versuche, die ExecuteQuery
auf der zweiten bis zur letzten Zeile laufen wirft:
Ausnahme: System.Data.SqlClient.SqlException, falsche Syntax nahe dem Schlüsselwort ‚PROC‘.
Warum funktioniert es in SQL Server, aber nicht in C# -Code? Gibt es eine andere Möglichkeit, dies in C# zu tun? Lassen Sie mich wissen, ob es C# Richtlinien gibt, denen ich folgen sollte, während ich noch diese C# - db Arbeit lerne.
EDIT: Ich weiß, dass ich dies als eine normale gespeicherte Prozedur tun konnte, und in einem Datatable passieren aber es gibt Team Fragen, die ich nicht sagen kann, und es zwingt mich, die sp als Text zu verwenden.
Im haben erraten seiner mehr, wie Sie die C# Anrufe, das ist die Frage zu tun. alle Zeilen vor der letzten ExeC#computebasedoncritieria würden excutenonquery, Zeilen sein, die letzte müsste eine normale Abfrage sein, um die Daten zu erhalten - können Sie Ihren C# Code zeigen – BugFinder
Ich habe das Bild eingefügt, das meinen C# Code enthält. Ich habe die #computebasedoncritieria noch nicht codiert; Das Ausführen der #AddCriteriaTable löst einen Fehler aus. –
Schielen auf Ihren Code Ich erwarte nicht, dass Sie das Verfahren wie Sie haben, wie Sie es nennen, wie Sie es machen, ich erwarte, dass Sie es mit einer anderen Execnoquery machen, dann führen Sie es aus .. es scheint eine Mischung aus beidem zu haben in diesem letzten Satz von Befehlen – BugFinder