Problem:
Wenn Werte in dem folgende Skript zur Verfügung gestellt werden dann wie unten ein Setup in C# ausgeführt (oder in SQL Server-Umgebung) die Werte in der Datenbank nicht aktualisieren.SQL Server gespeicherte Prozedur Nullable Parameter
Stored Procedure:
-- 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
Wenn ich eine Ausführung dieses Skripts zu tun, wie unten, ist es keine Werte aktualisieren.
Beispiel Ausführung:
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
Details:
Nach dem Ausführen einer (über C# -Code oder SQL Server-Umgebung) ausgeführt wird es nicht dbo.DropDownSelection.SelectedOptionID
nicht aktualisiert. Ich vermute, dass es sein könnte, weil dbo.DropDownSelection.SelectedOptionID
nicht Nullable ist und der Parameter, den ich benutze, um es zu setzen, ist Nullable (obwohl bei der Einstellung sollte es nie null sein). Bei der Ausführung ist der Rückgabewert 0. Wenn ich eines der Updates außerhalb der Prozedur ausführen, funktionieren sie perfekt, daher mein Verdacht, dass es mit nullfähigen Typen zu tun hat.
Frage (n):
Könnte sein, weil die Parameter der gespeicherten Prozedur nullable sind und die Felder Ich gründe nicht?
Wenn nicht, was könnte es sein?
Wenn Sie diese Einfügevorgänge und Aktualisierungen in Selektionen ändern, geben Sie Daten für die angegebenen Parameter zurück? – TTeeple
Ja. Ich aktualisierte meine Frage, fügte hinzu: "Wenn ich eines der Updates außerhalb der Prozedur ausführen, funktionieren sie perfekt, daher mein Verdacht, dass es mit nullfähigen Typen zu tun hat." – Shelby115
1) Ich habe meine Frage ein wenig geklärt. Ich versuche nicht, Ausgabeparameter zu machen. 2) Die gespeicherte Prozedur sagt, dass sie ausgeführt wird, und sie gibt 0 zurück, aber die Werte werden nie aktualisiert. Ich bin mir nicht sicher, was du mit "via sql block" meinst. – Shelby115