Int Результат не увеличивается с помощью Cmd.ExecuteScalar PRoblem? - PullRequest
1 голос
/ 28 сентября 2010

Теперь это мой код обновления записей.

Доступ к данным:

    public int UpdateBatch(FillinEntity fin)
    {
        int result = 0;
        using (SqlConnection conn = new SqlConnection(connStr))
        {
            conn.Open();

            using (SqlCommand dCmd = new SqlCommand("UpdatebyBatch", conn))
            {
                dCmd.CommandType = CommandType.StoredProcedure;
                try
                {
                    dCmd.Parameters.AddWithValue("@Batch", fin.Batch);
                    dCmd.Parameters.Add("@Date", SqlDbType.DateTime).Value = DateTime.Now.ToString();
                    dCmd.Parameters.AddWithValue("@User", fin.ModifiedBy);

                    result = Convert.ToInt32(dCmd.ExecuteScalar());

                    return result;

                }
                catch (SqlException ee)
                {
                    throw ee;
                }
                finally
                {
                    if (conn.State == ConnectionState.Open) conn.Close();

                }
            }
        }
    }

БИЗНЕС-ЛОГИКА:

    public int UpdateBatch(FillinEntity fin)
    {
        DAL pDAL = new DAL();
        try
        {
            return pDAL.UpdateBatch(fin);
        }
        catch
        {
            throw;
        }
        finally
        {
            pDAL = null;
        }
    }

Пользовательский интерфейс:

         FillinEntity fin = new FillinEntity();
         BAL pBAL = new BAL();
         try
         {
            fin.Batch = txtBACTHCODE.Text.Trim();
            fin.ModifiedBy = lblUser.Text;

            int result = pBAL.UpdateBatch(fin);
            if (result > 0)
            {
                MessageBox.Show("Make Sure Batch is All Kitted!");

            }
            else
            {
                MessageBox.Show("Record Updated Successfully.");
            }

SQL:

UPDATE dbo.FG_FILLIN  SET 
    Status='SHIPPED'
    ,DateModified=@Date 
    ,ModifiedBy=@User
WHERE Batch = @Batch and (Status='KITTED')

Моя проблема в том, что она всегда возвращает 0 результатов, поэтому мое окно сообщений всегда запрашивает успешно, даже если мой статус НЕ УСТАНОВЛЕН.

Спасибо, С уважением!

Ответы [ 2 ]

2 голосов
/ 28 сентября 2010

Ваша хранимая процедура не возвращает значение, которое ExecuteScalar может использовать. Вместо этого вы можете использовать метод ExecuteNonQuery , чтобы вернуть количество затронутых записей.

result = dCmd.ExecuteNonQuery();
1 голос
/ 28 сентября 2010

Чтобы ExecuteScalar возвращал значение, вы должны вернуть его.Вы можете изменить свой SQL так, чтобы он выглядел следующим образом:

UPDATE dbo.FG_FILLIN  SET 
    Status='SHIPPED'
    ,DateModified=@Date 
    ,ModifiedBy=@User
WHERE Batch = @Batch and (Status='KITTED')

SELECT @@ROWCOUNT

или вместо него можно использовать метод ExecuteNonQuery.

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