mam procedur przechowywanych, który ma 3 parametry wejściowe. Id, i 2 warunki VarChar. Działa to dobrze, gdy wykonuję suchy przebieg procedury przechowywanej, ale gdy wywołuję tę samą procedurę przechowywaną z mojego kodu C#, to się nie powiedzie. Przepuszczam dokładnie te same parametry, których używam w trybie suchym procedury przechowywanej, ale procedura przechowywana pozostaje zwisająca.przechowywane procedura działa w bazie danych, ale nie jest w kod C#
Czy istnieje jakikolwiek powód, aby tak się stało?
Używam SQL Server 2008 R2 edycja Express.
To jest sucho procedury przechowywanej:
EXEC @return_value = [dbo].[GetAttributes]
@pi_PId = 95102,
@pi_returnOnly1stRow = 0,
@pi_returnExtAttr = 1
SELECT 'Return Value' = @return_value
Jest to wezwanie z kodu C#:
SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand = new SqlCommand("GetAttributes", conn);
da.SelectCommand.Parameters.AddWithValue("@pi_PId", 95102);
da.SelectCommand.Parameters.AddWithValue("@pi_returnOnly1stRow", 0);
da.SelectCommand.Parameters.AddWithValue("@pi_returnExtAttr", 1);
da.SelectCommand.CommandType = CommandType.StoredProcedure;
DataSet ds = new DataSet();
da.Fill(ds, "result_name");
DataTable dt = ds.Tables["result_name"];
conn.Close();
EDIT: Problem Zwraca ....
Myślałem, że rozwiązałem ten problem, zabijając proces, który spowodował ten problem, ale niestety powrócił. Powiedział, że mam lepsze Zrozumienie problemu i widzę problem, ale nie jestem pewien, co to powoduje.
Problem jest taki sam. Procedura przechowywana działa dobrze, jeśli uruchomić bezpośrednio na serwerze SQL, ale nie wykona, gdy wywołana z C# programu ....
Pobiegłem sp_lock. Zastosowana procedura przechowywana ma Spid: "59", dla którego zamki są pokazane poniżej. Nie wiem, dlaczego te tabele zostaną zablokowane tylko wtedy, gdy procedura składowana jest wywoływana z poziomu C#, a nie kiedy podczas suchego uruchomienia SP.
59 2 0 0 DB [ENCRYPTION_SCAN] S GRANT
59 5 1802489500 0 PAG 1:169937 S GRANT
59 5 1914489899 0 TAB IS GRANT
59 5 1898489842 0 TAB IS GRANT
59 5 1177771253 0 TAB IS GRANT
59 5 1786489443 0 TAB IS GRANT
59 5 1802489500 0 TAB IS GRANT
59 5 1882489785 0 TAB IS GRANT
59 5 0 0 DB S GRANT
NAJNOWSZE EDIT: Mam również edytowane mój Sp przez introdrucing Z NOLOCK na każdej z tabel zaangażowanych w SP
Ja również wklejenie procedury przechowywanej tutaj dla odniesienia (z najnowszym NOLOCK dodana) ....
@pi_PId INT
, @pi_returnOnly1stRow BIT
, @pi_returnExtAttr BIT
AS
BEGIN
IF(@pi_returnOnly1stRow=1)
BEGIN
SELECT TOP 1 NULL section_name,header_mvoc.text Attr_Name, body_mvoc.Text Attr_Value,cds_mspecee.DisplayOrder
FROM cds_mspecee WITH (NOLOCK)
JOIN cds_mvocee header_mvoc WITH (NOLOCK)ON (cds_mspecee.hdrid = header_mvoc.id)
JOIN cds_mvocee body_mvoc WITH (NOLOCK) ON (cds_mspecee.bodyid = body_mvoc.id)
JOIN cds_prod WITH (NOLOCK)ON (cds_Prod.prodid = cds_mspecee.prodid)
JOIN ProductVariant revpro WITH (NOLOCK) On (revpro.ManufacturerSKU=cds_prod.mfpn)
AND revpro.ProductID = @pi_PId
UNION
SELECT section_evoc.Text section_name, header_evoc.text Attr_Name, body_evoc.Text Attr_Value, cds_Especee.DisplayOrder
FROM cds_Especee WITH (NOLOCK)
JOIN cds_Evocee section_evoc WITH (NOLOCK) ON (cds_Especee.SectID = section_evoc.ID)
JOIN cds_Evocee header_evoc WITH (NOLOCK) ON (cds_Especee.hdrid = header_evoc.id)
JOIN cds_Evocee body_evoc WITH (NOLOCK) ON (cds_Especee.bodyid = body_evoc.id)
JOIN cds_prod WITH (NOLOCK) ON (cds_Prod.prodid = cds_especee.prodid)
JOIN ProductVariant revpro WITH (NOLOCK) On (revpro.ManufacturerSKU=cds_prod.mfpn)
AND revpro.ProductID = @pi_PId
AND @pi_returnExtAttr = 1
ORDER BY section_name,displayorder ASC
END
ELSE
BEGIN
SELECT NULL section_name ,header_mvoc.text Attr_Name, body_mvoc.Text Attr_Value,cds_mspecee.DisplayOrder
FROM cds_mspecee WITH (NOLOCK)
JOIN cds_mvocee header_mvoc WITH (NOLOCK) ON (cds_mspecee.hdrid = header_mvoc.id)
JOIN cds_mvocee body_mvoc WITH (NOLOCK) ON (cds_mspecee.bodyid = body_mvoc.id)
JOIN cds_prod WITH (NOLOCK) ON (cds_Prod.prodid = cds_mspecee.prodid)
JOIN productVariant revpro WITH (NOLOCK) On (revpro.manufacturerSKU=cds_prod.mfpn)
AND revpro.ProductID = @pi_PId
UNION
SELECT section_evoc.Text section_name,header_evoc.text Attr_Name, body_evoc.Text Attr_Value,cds_Especee.DisplayOrder
FROM cds_Especee WITH (NOLOCK)
JOIN cds_Evocee section_evoc WITH (NOLOCK) ON (cds_Especee.sectid = section_evoc.id)
JOIN cds_Evocee header_evoc WITH (NOLOCK) ON (cds_Especee.hdrid = header_evoc.id)
JOIN cds_Evocee body_evoc WITH (NOLOCK) ON (cds_Especee.bodyid = body_evoc.id)
JOIN cds_prod WITH (NOLOCK) ON (cds_Prod.prodid = cds_especee.prodid)
JOIN productVariant revpro WITH (NOLOCK) On (revpro.manufacturerSKU=cds_prod.mfpn)
AND revpro.ProductID = @pi_PId
AND @pi_returnExtAttr = 1
ORDER BY section_name,displayorder ASC
END
END
kod proszę pisać procedury składowane i inwokacji (zarówno sql i C#) – SQLDiver
jesteś bardziej prawdopodobne, aby uzyskać odpowiedź, jeśli pisać kod, którego używasz podczas pracy/nazywając procedura składowana (zarówno w trybie suchym, jak i w kodzie C#) –
@MarsOne Podaj bardziej szczegółowe informacje. 1 - Czy używasz 'ADO.NET',' EF' lub czegoś innego na stronie 'C#'. 2 - Kod, który próbujesz wykonać. 3 - błąd, który otrzymujesz. – Leron