簡體   English   中英

使用C#WPF和SQL添加行時的自動增量值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM