आदर्श रूप से आप तालिका परिभाषा को बदलकर टैगआईडी को पहचान फ़ील्ड बना देंगे। अगर आप ऐसा नहीं कर सकते हैं, तो अगला सबसे अच्छा होगा:
CREATE PROCEDURE [dbo].[InsertTagProcdure]
@Value nvarchar(200),
@TagCount nvarchar(200)
AS
BEGIN
BEGIN TRANSACTION
DECLARE @TagID int;
SELECT @TagID = coalesce((select max(TagID) + 1 from Tag), 1)
COMMIT
INSERT INTO
Tag
(TagID,Value,TagCount)
VALUES
(@TagID,@Value,@TagCount)
END
लेन-देन सुनिश्चित करता है कि आप अद्वितीय टैगआईडी के साथ समाप्त नहीं होते हैं और कोलेस विशेष मामले को संभालता है जहां तालिका खाली होती है और 1 का प्रारंभिक मान देता है।
संपादित करें:
आपके मूल प्रश्न में परिवर्तन के आधार पर, तालिका में पहले से ही एक पहचान कॉलम है, इसलिए आपकी संग्रहीत प्रक्रिया होनी चाहिए:
CREATE PROCEDURE [dbo].[InsertTagProcdure]
@Value nvarchar(200),
@TagCount nvarchar(200)
AS
BEGIN
INSERT INTO Tag (Value,TagCount) VALUES (@Value,@TagCount)
END
और आपका C# कोड होना चाहिए
int TagID =int.Parse(txtTagID.Text); // यह दूर गिर जाना चाहिए तो ऑटो वृद्धि। स्ट्रिंग मान =txtValue.Text; int टैगकाउंट =int.Parse (txtCount.Text);
using (var conn = new SqlConnection(Properties.Settings.Default.DBConnectionString))
using (var cmd = conn.CreateCommand())
{
conn.Open();
cmd.CommandText = "InsertTagProcdure";
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@Value", Value);
cmd.Parameters.AddWithValue("@TagCount", TagCount);
cmd.ExecuteNonQuery();
}