C#で実行する必要があるSQL文があり、C#コードからパラメータを取得する必要があります。私はストアドプロシージャがSQLインジェクションを避けることが好まれていることを知っているが、私はC#でこれを行うために探している。一時ストアドプロシージャを実行中のC#
このSQLをC#に翻訳していますが、SQL Server Management Studioでクエリが機能していてもエラーが発生しました。今、私は#AddCriteriaTable
プロシージャを実行しようとすると、私はエラーが発生したC#でこれをしようと
-- 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
:それは一時的なストアドプロシージャと以下の一時テーブルを使用しています。
例外:System.Data.SqlClient.SqlException、キーワード「PROC」付近に不適切な構文私はそれがスロー最後の行に2つ目の
ExecuteQuery
を実行しようとします。
なぜSQL Serverでは動作しますが、C#コードでは機能しませんか? C#でこれを行う別の方法はありますか?私はまだこのc# - db作業を学んでいるので、私が従うべきであるC#のガイドラインがあるかどうかを教えてください。
EDIT: 私は通常のストアドプロシージャとしてこれを行うと、しかし、私が言うことができないチームに問題があるのDataTableに渡すことができます知っていて、それがテキストとしてSPを使用するために私を強制します。それが失敗していることを
Imは推測であなたのSQLに
CREATE PROC
を持っているのでしかし、すべてのことから離れては、あなたがエラーを取得しているのより多くのあなたが問題thatsのC#の呼び出しを行う方法。最後のexeC#computebasedoncritieriaの前のすべての行はexecutenonquery、行、最後のデータを取得する通常のクエリである必要があります - あなたのC#コードを表示することができます – BugFinder
私はC#コードを含む画像を貼り付けました。私はまだ#computebasedoncritieriaをコード化していない。 #AddCriteriaTableを実行するとエラーが発生します。 –
あなたのコードではじまるあなたはあなたがそれを作るときにそれを呼び出すように見えるので、Idは別のexecnoqueryでそれを作ることを期待し、それを実行します..それは両方の組み合わせを持っているようですその最後のコマンドセットで – BugFinder