При выполнении примеров Enterprise Library 5.0 и когда я использую ExecuteNonQuery для запуска sproc-обновления, он возвращает 2. Обновление основано на ProductID, Первичном ключе таблицы (да, я проверял, и он уникален).
Вот простой спрок:
ALTER PROCEDURE [dbo].[UpdateProductsTable]
@ProductID int,
@ProductName varchar(50) = NULL,
@CategoryID int = NULL,
@UnitPrice money = NULL
AS
BEGIN
UPDATE Products
SET
ProductName = @ProductName,
CategoryID = @CategoryID,
UnitPrice = @UnitPrice
WHERE ProductID = @ProductID
END
Выполнение этого sp в SSMS показывает «1 ряд» в нижнем правом углу окна результатов запроса и возвращаемое значение 0 в сетке. При нажатии на вкладку сообщений отображается
(1 row(s) affected)
(1 row(s) affected)
(1 row(s) affected)
не уверен, почему я вижу это 3 раза здесь, но я не верю, что это проблема.
Вот код, вызывающий sp:
public static void Exec_Update_Query()
//updates a column of a single row, checks that the update succeeded, and then update it again to return it to the original value
{
string oldName = "Chai";
string newName = "Chai Tea";
SqlDatabase defaultDB = EnterpriseLibraryContainer.Current.GetInstance<Database>() as SqlDatabase;
// Create command to execute the stored procedure and add the parameters.
DbCommand cmd = defaultDB.GetStoredProcCommand("UpdateProductsTable");
defaultDB.AddInParameter(cmd, "ProductID", DbType.Int32, 1);
defaultDB.AddInParameter(cmd, "ProductName", DbType.String, newName);
defaultDB.AddInParameter(cmd, "CategoryID", DbType.Int32, 1);
defaultDB.AddInParameter(cmd, "UnitPrice", DbType.Currency, 18);
// Execute the query and check if one row was updated.
int i = defaultDB.ExecuteNonQuery(cmd);
if (i == 1)
{
// Update succeeded.
}
else
{
Console.WriteLine("ERROR: Could not update just one row.");
}
// Change the value of the second parameter
defaultDB.SetParameterValue(cmd, "ProductName", oldName);
// Execute query and check if one row was updated
if (defaultDB.ExecuteNonQuery(cmd) == 1)
{
// Update succeeded.
}
else
{
Console.WriteLine("ERROR: Could not update just one row.");
}
}
Я использую int i для просмотра возвращаемого значения из метода, и он возвращает 2. Есть идеи, почему это будет? Это Enterprise Libarary 5.0 в VS2010, работающий на SQL 2005. Довольно простой, но сбивающий с толку.