2014-08-31 6 views
5

से काम नहीं कर रही है मैं सी # के भीतर एक संग्रहीत प्रक्रिया को कॉल करने की कोशिश कर रहा हूं।संग्रहित प्रक्रिया सी # कोड

using (SqlConnection connection = new SqlConnection(connectionString)) 
    using (SqlCommand command = connection.CreateCommand()) 
    { 
     command.CommandType = CommandType.StoredProcedure; 
     command.CommandText = "updateData"; 
     command.Parameters.Add(new SqlParameter("@inrego", rego)); 
     command.Parameters.Add(new SqlParameter("@inOprt", oprt)); 
     command.Parameters.Add(new SqlParameter("@inService", service)); 

     connection.Open(); 

     int update = command.ExecuteNonQuery(); 

     Console.WriteLine(update); 

     connection.Close(); 
    } 

अद्यतन कंसोल पर 1 दिखाता है, लेकिन डेटाबेस अभी भी अपडेट नहीं किया गया है।

इस संग्रहीत प्रक्रिया

CREATE PROCEDURE [dbo].updateData 
@inrego varchar(5), 
@inOprt char(3), 
@inService as varchar(50) 

AS 
delete from buses where rego = @inrego; 
insert into buses (rego, operator,service) values(@inrego, @inOprt, @inService); 
RETURN 0 

संग्रहीत प्रक्रिया चल रहा है मैन्युअल रूप से काम करता है, उर्फ ​​

USE [C:\USERS\---\DOCUMENTS\VISUAL STUDIO 2013\PROJECTS\---\TEST.DB.MDF] 
GO 

DECLARE @return_value Int 

EXEC @return_value = [dbo].[updateData] 
     @inrego = N'1', 
     @inOprt = N'2', 
     @inService = N'3' 

SELECT @return_value as 'Return Value' 

GO 

काम करता है, और सफलतापूर्वक डेटाबेस अद्यतन करता है, लेकिन कोड के रूप सी # नहीं करता है।

+0

क्या आपने http://stackoverflow.com/questions/4492536/how-run-a-stored-procedure-with-parameters-has-a-return-value-from-code-behi की कोशिश की है? –

+0

मुझे संदेह है कि आपको कॉल के लिए "dbo.updateData" की आवश्यकता हो सकती है। –

+0

बस इसे @EugenePodskal की कोशिश की। दुर्भाग्य से वही परिणाम। – matthew5025

उत्तर

4

मैं (एमएस एसक्यूएल एक्सप्रेस 2013 विन 8.1, .NET 4.5) स्वच्छ स्थानीय डेटाबेस पर समस्या को ठीक करने में असमर्थ रहे हैं:

CREATE TABLE [dbo].buses 
(
    [rego] varchar(5) NOT NULL PRIMARY KEY, 
    [operator] char(3), 
    [service] varchar(50) 
) 
static void UpdateOrInsertBuses(String rego, String oprt, String service) 
{ 
    using (SqlConnection connection = new SqlConnection(connectionString)) 
    { 
     using (SqlCommand command = connection.CreateCommand()) 
     { 
      command.CommandType = CommandType.StoredProcedure; 
      command.CommandText = "updateData"; 
      command.Parameters.Add(new SqlParameter("@inrego", rego)); 
      command.Parameters.Add(new SqlParameter("@inOprt", oprt)); 
      command.Parameters.Add(new SqlParameter("@inService", service)); 

      connection.Open(); 
      try 
      { 
       int update = command.ExecuteNonQuery(); 

       Console.WriteLine(update); 
      } 
      catch (Exception exc) 
      { 
       Console.WriteLine(exc.Message); 
      } 
      finally 
      { 
       connection.Close(); 
      } 
     } 
    } 
} 

// ... 
// Add data 
UpdateOrInsertBuses("11", "12", "13"); 
UpdateOrInsertBuses("21", "22", "23"); 

// Update added 
UpdateOrInsertBuses("21", "22", "Changed for sure"); 

इसलिए, यह कुछ मुद्दा यह है कि संबंधित नहीं है है आपके वर्तमान कोड में। जैसा कि @ गॉर्डन लिनॉफ़ द्वारा सुझाया गया है, यह या तो एक अनुमति मुद्दा है, या कुछ ट्रिगर जो अपडेट में दिक्कत करते हैं, या कुछ कारणों से डेटाबेस किसी भी बदलाव को उलट देता है या अनदेखा करता है।

+0

मैं वास्तव में डेटा स्रोत के रूप में "माइक्रोसॉफ्ट एसक्यूएल सर्वर डेटाबेस फ़ाइल (एसक्लक्लिएंट)" हूं, मैं एक का उपयोग करने की कोशिश करूंगा एस क्यू एल सर्वर। – matthew5025

+0

बस SQL ​​सर्वर 2014 के साथ प्रयास किया, और यह काम करता है। आपका बहुत बहुत धन्यवाद! – matthew5025

+0

तो, यह केवल डेटाबेस फ़ाइलों के लिए प्रासंगिक मुद्दा है, होस्टेड के लिए नहीं? हम्म, मैं बाद में जांचने के लिए डेटाबेस फ़ाइल डीबी के साथ कोशिश करूंगा। –

संबंधित मुद्दे