Попытка запустить хранимую процедуру UPDATE в C #, но она ничего не делает - PullRequest
1 голос
/ 13 декабря 2011

Когда я запускаю хранимую процедуру вручную, она работает нормально.Однако всякий раз, когда я пытаюсь вызвать его с помощью кода ниже, ничего не обновляетсяОдна вещь, которую я заметил, заключается в том, что в своей хранимой процедуре я изменяю поле «Дата изменения» на текущее время / дату, и это обновляется;однако, ни одно из моих других значений не является.

Вот мой метод, который я использую:

public void EditProduct(int productID, string productName, string productNumber, string productColor, string productSubcategory)
    {
        ConfigureDataAccess();
        myCommand = new SqlCommand("[dbo].[UpdateProductInfo]", myConnection);
        myCommand.CommandType = CommandType.StoredProcedure;
        myCommand.Parameters.AddWithValue("@ProductID", productID);
        myCommand.Parameters.AddWithValue("@ProductName", String.IsNullOrWhiteSpace(productName) ? (object)DBNull.Value : (object)productName);
        myCommand.Parameters.AddWithValue("@ProductNumber", String.IsNullOrWhiteSpace(productNumber) ? (object)DBNull.Value : (object)productNumber);
        myCommand.Parameters.AddWithValue("@ProductColor", String.IsNullOrWhiteSpace(productColor) ? (object)DBNull.Value : (object)productColor);
        myCommand.Parameters.AddWithValue("@ProductSubcategory", String.IsNullOrWhiteSpace(productSubcategory) ? (object)DBNull.Value : (object)productSubcategory);

        try
        {
            try
            {
                myConnection.Open();
                myCommand.ExecuteNonQuery();
            }
            catch (SqlException exception)
            {
                exception.Data.Add("cstring", myConfiguration);
                throw;
            }
            catch (InvalidOperationException ex)
            {
                ex.Data.Add("cStatus", myConnection.State);
                throw;
            }
        }
        finally
        {
            myConnection.Close();
        }

Я не верю, что ConfigureDataAccess() является проблемой, потому что другие методы используют его, и они работают нормально.Есть что-нибудь, что сразу торчит?

Редактировать: Вот моя хранимая процедура:

ALTER PROCEDURE [dbo].[UpdateProductInfo]

@ProductID as int,
@ProductName as varchar(50),
@ProductNumber as varchar(25),
@ProductColor as varchar(15),
@ProductSubcategory as varchar(50)

AS
BEGIN

SET NOCOUNT ON;

UPDATE P
SET P.Name = @ProductName, P.ProductNumber = @ProductNumber, P.Color = @ProductColor, P.ModifiedDate = GetDate(), 
P.ProductSubcategoryID = (SELECT PS.ProductSubcategoryID FROM Production.ProductSubcategory PS WHERE PS.Name = @ProductSubcategory)
FROM Production.Product as P
LEFT OUTER JOIN  Production.ProductSubcategory as PS ON P.ProductSubcategoryID = PS.ProductSubcategoryID
WHERE P.ProductID = @ProductID
END

Вот мой ConfigureDataAccess() метод:

    private string myConfiguration;
    private SqlConnection myConnection;
    private SqlCommand myCommand;
    private SqlDataReader myReader;
    private List<Product> myProducts;

    public void ConfigureDataAccess()
    {
        myConfiguration = ConfigurationManager.ConnectionStrings["myConnection"].ConnectionString;
        myConnection = new SqlConnection(myConfiguration);
        myReader = null;
        myProducts = new List<Product>();
    }    

Ответы [ 3 ]

0 голосов
/ 14 декабря 2011

Да, я не вижу использования левого внешнего соединения.Удалить и попробовать.Другая вещь, которая может помочь, - прекратить подавлять исключения, пока вы находитесь в разработке.Прокомментируйте try catch, чтобы увидеть исключения (если есть).

0 голосов
/ 14 декабря 2011

Я разобрался в проблеме.Мне нужно было включить if (!IsPostBack) в мое Page_Load событие.Я не осознавал, что когда я нажимал кнопку «Сохранить» на моей веб-форме, она отправляла сообщения назад и настраивала мои текстовые поля (для которых параметры в методе EditProduct() получают свои значения) обратно в исходные значения.

0 голосов
/ 14 декабря 2011

Я бы попытался удалить фразу LEFT JOIN оператора SQL.

LEFT OUTER JOIN  Production.ProductSubcategory as PS ON P.ProductSubcategoryID = PS.ProductSubcategoryID 

Я думаю, что SQL будет работать без него.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...