使用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();

使用c# WPF和SQL添加行时自动增加值

首先,您应该小心使用该代码,您应该为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,这样就可以读取插入的值。

希望这对你有帮助。

问候。