Lý tưởng nhất là bạn chỉ đặt TagID làm trường nhận dạng bằng cách thay đổi định nghĩa bảng. Nếu bạn không thể làm điều đó, cách tốt nhất tiếp theo là:
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
Giao dịch đảm bảo rằng bạn không kết thúc với các TagID duy nhất và liên kết xử lý trường hợp đặc biệt trong đó bảng trống và cung cấp giá trị ban đầu là 1.
CHỈNH SỬA:
Dựa trên sự thay đổi đối với câu hỏi ban đầu của bạn, bảng đã có một cột nhận dạng, vì vậy thủ tục được lưu trữ của bạn sẽ là:
CREATE PROCEDURE [dbo].[InsertTagProcdure]
@Value nvarchar(200),
@TagCount nvarchar(200)
AS
BEGIN
INSERT INTO Tag (Value,TagCount) VALUES (@Value,@TagCount)
END
và mã C # của bạn phải là
int TagID =int.Parse (txtTagID.Text); // Điều này sẽ biến mất nên auto increment.String Value =txtValue.Text; int TagCount =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();
}