Int结果不使用Cmd.ExecuteScalar PRoblem递增?

时间:2010-09-28 02:46:52

标签: c# sql

现在这是我更新记录的代码。

数据访问:

    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;
        }
    }

UI:

         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 个答案:

答案 0 :(得分:2)

您的存储过程未返回ExecuteScalar可以使用的值。您可以使用ExecuteNonQuery method来返回受影响记录的数量。

result = dCmd.ExecuteNonQuery();

答案 1 :(得分:1)

为了让ExecuteScalar返回一个值,你必须返回一个值。您可以将SQL修改为如下所示:

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

SELECT @@ROWCOUNT

或者您可以使用ExecuteNonQuery方法。