使用c# WPF和SQL添加行时自动增加值
本文关键字:增加值 添加行 SQL WPF 使用 | 更新日期: 2023-09-27 18:02:09
我正在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为空。如何使它在添加数据时自动增加?
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/en-us/library/ms187342.aspx。然而,这个函数可能不会返回正确的值,如果你在一个有很多数据库流量的环境中工作,它只是返回最后一次插入操作的ID,如果有并发,你可能会有问题,所以检查其他选项,这可能在执行中较慢,但更可靠。
主要目的是在插入之后从数据库返回自动递增的ID,这样就可以读取插入的值。
希望这对你有帮助。
问候。