C# 'da çalışmam gereken ve C# kodundan parametre almam gereken bir SQL deyim var. SQL enjeksiyonunu önlemek için saklı yordamların tercih edildiğini biliyorum ancak bunu C# 'da yapmak istiyorum.C# geçici saklı yordamını çalıştırıyor
Bu SQL'i C# ye çeviriyorum ancak SQL Server Management Studio'da sorgu çalışmasına rağmen bir hatayla karşılaştım. Ben #AddCriteriaTable
yordamı çalıştırmayı denediğinizde
-- 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
Şimdi bir hatayla karşılaşırsanız bu C# çalışıyorum: Geçici saklı yordam ve aşağıdaki geçici tablosu kullanır.
İstisna: System.Data.SqlClient.SqlException, anahtar kelime 'PROC' yakınında yanlış sözdizimi bunu atar son satırına ikinci üzerindeki
ExecuteQuery
çalıştırmayı denediğinizde.
Neden SQL Server'da çalışıyor, ancak C# kodunda çalışmıyor? Bunu C# yapmanın başka bir yolu var mı? Bu C# - db çalışmasını hala öğrenirken takip etmem gereken kurallar varsa bana bildirin.
DÜZENLEME: Ben normal bir saklı yordam olarak bunu yapmak ve ancak diyemeyiz takım sorunları vardır bir DataTable geçebileceği biliyorum ve bir metin olarak sp kullanmak beni zorlar. Bu anlamda sadece prosedürü oluştururken beri, sadece ihtiyaç buraya değerler geçirmek için yapmaz
cmd.CommandText = @"CREATE PROC#AddCriteriaTable (@ParameterCode VARCHAR(64), @Value VARCHAR(64)) AS INSERT #CriteriaTable VALUES (@ParameterCode, @Value)";
cmd.Parameters.AddWithValue("@ParameterCode", request.Criteria.First().Key;
cmd.Parameters.AddWithValue("@Value", request.Criteria.First().Value;
var reader2 = cmd.ExecuteReader();
:
tahmin Im daki SQL
CREATE PROC
çünküAMA tüm bu ayrı, bir hata alıyorsanız onun daha Sorunla şu C# arama yapmak nasıl. son exeC#computebasedoncritieria önce tüm satırları executenonquery olurdu, satırlar, son veri almak için normal bir sorgu olması gerekir - C# kodunuzu gösterebilir miyim – BugFinder
Ben C# kod içeren görüntü yapıştırılır. Henüz #computebasedoncritieria kodlamadım; #AddCriteriaTable yürütülmesi bir hata atar. –
Kodunuzda daraltma Yaptığınız gibi, yaptığınız gibi bir işlem yapmak için beklemediğiniz gibi, bir başka execnoquery ile yapmasını beklersiniz, daha sonra çalıştırırsınız. Bu son komut kümesinde – BugFinder