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