मैंने आपकी संग्रहीत कार्यविधि को थोड़ा संशोधित किया है (SCOPE_IDENTITY
. का उपयोग करने के लिए) ) और यह इस तरह दिखता है:
CREATE PROCEDURE usp_InsertContract
@ContractNumber varchar(7),
@NewId int OUTPUT
AS
BEGIN
INSERT INTO [dbo].[Contracts] (ContractNumber)
VALUES (@ContractNumber)
SELECT @NewId = SCOPE_IDENTITY()
END
मैंने यह कोशिश की और यह ठीक काम करता है (उस संशोधित संग्रहीत प्रक्रिया के साथ):
// define connection and command, in using blocks to ensure disposal
using(SqlConnection conn = new SqlConnection(pvConnectionString ))
using(SqlCommand cmd = new SqlCommand("dbo.usp_InsertContract", conn))
{
cmd.CommandType = CommandType.StoredProcedure;
// set up the parameters
cmd.Parameters.Add("@ContractNumber", SqlDbType.VarChar, 7);
cmd.Parameters.Add("@NewId", SqlDbType.Int).Direction = ParameterDirection.Output;
// set parameter values
cmd.Parameters["@ContractNumber"].Value = contractNumber;
// open connection and execute stored procedure
conn.Open();
cmd.ExecuteNonQuery();
// read output value from @NewId
int contractID = Convert.ToInt32(cmd.Parameters["@NewId"].Value);
conn.Close();
}
क्या यह आपके वातावरण में भी काम करता है? मैं यह नहीं कह सकता कि आपका मूल कोड क्यों काम नहीं करेगा - लेकिन जब मैं इसे यहां करता हूं, वीएस -2010 और एसक्यूएल सर्वर 2008 आर 2, यह सिर्फ त्रुटिपूर्ण रूप से काम करता है ....
यदि आपको कोई मूल्य वापस नहीं मिलता है - तो मुझे आपकी तालिका पर संदेह है Contracts
हो सकता है कि वास्तव में IDENTITY
वाला कॉलम न हो उस पर संपत्ति।