問題:
當值被提供給下面的腳本然後使用C#的設置像下面執行(或在SQL Server環境)的值不更新數據庫中。SQL Server存儲過程可爲空的參數
存儲過程:
-- Updates the Value of any type of PropertyValue
-- (Type meaining simple Value, UnitValue, or DropDown)
CREATE PROCEDURE [dbo].[usp_UpdatePropertyValue]
@PropertyValueID int,
@Value varchar(max) = NULL,
@UnitValue float = NULL,
@UnitOfMeasureID int = NULL,
@DropDownOptionID int = NULL
AS
BEGIN
-- If the Property has a @Value, Update it.
IF @Value IS NOT NULL
BEGIN
UPDATE [dbo].[PropertyValue]
SET
Value = @Value
WHERE
[dbo].[PropertyValue].[ID] = @PropertyValueID
END
-- Else check if it has a @UnitValue & UnitOfMeasureID
ELSE IF @UnitValue IS NOT NULL AND @UnitOfMeasureID IS NOT NULL
BEGIN
UPDATE [dbo].[UnitValue]
SET
UnitValue = @UnitValue,
UnitOfMeasureID = @UnitOfMeasureID
WHERE
[dbo].[UnitValue].[PropertyValueID] = @PropertyValueID
END
-- Else check if it has just a @UnitValue
ELSE IF @UnitValue IS NOT NULL AND @UnitOfMeasureID IS NULL
BEGIN
UPDATE [dbo].[UnitValue]
SET
UnitValue = @UnitValue
WHERE
[dbo].[UnitValue].[PropertyValueID] = @PropertyValueID
END
-- Else check if it has a @DropDownSelection to update.
ELSE IF @DropDownOptionID IS NULL
BEGIN
UPDATE [dbo].[DropDownSelection]
SET
SelectedOptionID = @DropDownOptionID
WHERE
[dbo].[DropDownSelection].[PropertyValueID] = @PropertyValueID
END
END
當我做這個腳本的執行,如下面,它不會更新任何值。
實施例執行:
String QueryString = "EXEC [dbo].[usp_UpdatePropertyValue] @PropertyValueID, @Value, @UnitValue, @UnitOfMeasureID, @DropDownOptionID";
SqlCommand Cmd = new SqlCommand(QueryString, this._DbConn);
Cmd.Parameters.Add(new SqlParameter("@PropertyValueID", System.Data.SqlDbType.Int));
Cmd.Parameters.Add(new SqlParameter("@Value", System.Data.SqlDbType.Int));
Cmd.Parameters.Add(new SqlParameter("@UnitValue", System.Data.SqlDbType.Int));
Cmd.Parameters.Add(new SqlParameter("@UnitOfMeasureID", System.Data.SqlDbType.Int));
Cmd.Parameters.Add(new SqlParameter("@DropDownOptionID", System.Data.SqlDbType.Int));
Cmd.Parameters["@PropertyValueID"].Value = Property.Value.ID; // 1
Cmd.Parameters["@Value"].IsNullable = true;
Cmd.Parameters["@Value"].Value = DBNull.Value;
Cmd.Parameters["@UnitValue"].IsNullable = true;
Cmd.Parameters["@UnitValue"].Value = DBNull.Value;
Cmd.Parameters["@UnitOfMeasureID"].IsNullable = true;
Cmd.Parameters["@UnitOfMeasureID"].Value = DBNull.Value;
Cmd.Parameters["@DropDownOptionID"].IsNullable = true;
Cmd.Parameters["@DropDownOptionID"].Value = 2; // Current Value in DB: 3
詳細說明:
運行的執行(通過C#代碼或SQL Server環境)後它不更新dbo.DropDownSelection.SelectedOptionID
。我猜測這可能是因爲dbo.DropDownSelection.SelectedOptionID
是不可空的,我用來設置它的參數是可以爲空的(儘管設置時它不應該爲空)。在執行時,返回值爲0.如果我在程序之外運行其中一個更新程序,它們完美地工作,因此我懷疑它與無效類型有關。
問題(S):
難道這是因爲參數存儲過程可以爲空,我設置的字段都沒有?
如果不是,它會是什麼?
如果將這些插入和更新更改爲選擇,是否返回提供的參數的數據? – TTeeple
是的。我更新了我的問題,並補充道:「如果我在程序之外運行其中一個更新程序,那麼它們完美地工作,因此我懷疑它與無效類型有關。」 – Shelby115
1)我澄清了我的問題。我不想做輸出參數。 2)存儲過程表示它執行並返回0,但值永遠不會更新。我不確定你的意思是「通過SQL塊」。 – Shelby115