[英]Auto increment value on adding a row using C# WPF and SQL
我正在Visual Studio Express 2012中使用C#WPF。已经创建了一个基于本地服务的数据库( .mdf
数据库)。
我创建了一个表
CREATE TABLE [dbo].[Scenes] (
[id] INT IDENTITY (1, 1) NOT NULL,
[Planning_period] NVARCHAR (50) NOT NULL,
[Scene_name] NVARCHAR (50) NOT NULL,
PRIMARY KEY CLUSTERED ([id] ASC)
);
我希望能够添加新行,但是以下代码无法正常工作,因为我将id保留为null。 添加数据时如何使它自动递增?
SqlConnection cn = new SqlConnection(global::WaterfowlModel.Properties.Settings.Default.WAMConnectionString);
try
{
string sql = "INSERT INTO Scenes (Planning_period, Scene_name) Values ('" + working_plan + "','" + Create_plan_txt.Text +"')";
SqlCommand cmd = new SqlCommand(sql, cn);
cn.Open();
cmd.ExecuteNonQuery();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Error", MessageBoxButton.OK);
}
finally
{
cn.Close();
}
谢谢!
编辑
我也尝试通过存储过程进行此操作,并收到相同的错误。
CREATE PROCEDURE [dbo].[Add_Scene]
@param1 nvarchar(50),
@param2 nvarchar(50)
AS
INSERT INTO Scenes(Planning_period, Scene_name)
VALUES(@param1, @param2)
和代码:
string sql = "Add_Scene";
SqlCommand cmd = new SqlCommand(sql, cn);
SqlParameter planname = new SqlParameter("@param1", working_plan);
SqlParameter scenename = new SqlParameter("@param2", Create_plan_txt.Text);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add(planname);
cmd.Parameters.Add(scenename);
cn.Open();
cmd.ExecuteNonQuery();
首先,您应该谨慎使用该代码,应该为sqlCommand使用用户参数,而不要进行串联...
其次,与数据库一起使用,您应该看到如何进行调用,而不是使用sql Insert语句,而是调用存储过程,该过程将记录插入表并保存Insert语句。
因此,继续进行下去,如果您了解如何回答我的问题,那么您将看到,一旦存储过程运行良好,就可以自动进行递增;而不必担心;)。
您将赢得一切,因为您的代码将更加健壮,安全和可靠。
问候。
我遵循发现的说明创建要添加自动增量作为其主要字段的存储过程?
我要做的一件事是在启动应用程序之前重建解决方案。 在我重建之前,它不起作用。
进行更改后,只需在插入后返回存储过程中的ID,您便有足够的方法来执行此操作,但要小心...
如果您的数据库中没有很多流量,则可以使用此方法,这样会更快:
CREATE PROCEDURE [dbo].[Add_Scene]
@param1 nvarchar(50),
@param2 nvarchar(50)
AS
BEGIN
INSERT INTO Scenes(Planning_period, Scene_name)
VALUES(@param1, @param2)
RETURN @@IDENTITY
END
这是这种类型的存储过程的标准,您可以在这里看到: http : //technet.microsoft.com/zh-cn/library/ms187342.aspx 。 但是,此函数可能无法返回正确的值,如果您在数据库流量很大的环境中工作,则它仅返回上一个Insert操作的ID,如果存在并发,则可能有问题,因此请检查其他选项,执行速度可能较慢,但更可靠。
重点是从数据库中返回ID,该ID在插入后自动递增,因此您可以读取所做插入的值。
希望这对您有帮助。
问候。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.