ExecuteNonQuery() returns -1

本文关键字:returns ExecuteNonQuery | 更新日期: 2023-09-27 18:24:19

由于某些原因,result始终是-1,并且不会向数据库中添加任何内容。我在SQL Server中执行了查询,它运行得很好。我没有得到任何异常,也没有使用任何存储过程。

SqlConnection con = new SqlConnection("Data Source=.''SQLEXPRESS;Initial Catalog=RAINBOW;Integrated Security=True");
SqlCommand cmd;
cmd = new SqlCommand("INSERT INTO ItemDetails.item(description,category_id) VALUES (@item_desc,@cat_id)", con);
cmd.Parameters.AddWithValue("@item_desc", txtitemdesc.Text);
cmd.Parameters.AddWithValue("@cat_id", GetCategoryID());
try
{
     con.Open();
     int result = cmd.ExecuteNonQuery();
     if (result > 0)
     {
         MessageBox.Show("Record Inserted Successfully!");
     }
     else
     {
         MessageBox.Show("Failed to add record");
     }
}
catch (SqlException ex)
{
     MessageBox.Show("An error has occured! " + ex);
}
finally
{
     con.Close();
}

编辑

  int GetCategoryID()
        {
            int cat_id = 0;
            cmd = new SqlCommand("SELECT category_id FROM ItemDetails.category  WHERE category_desc=@cat_desc", con);
            con.Open();
            cmd.Parameters.AddWithValue("@cat_desc", cboCategory.Text);
            reader = cmd.ExecuteReader();
            while (reader.Read())
            {
                cat_id = int.Parse(reader["category_id"].ToString());
            }
            reader.Close();
            con.Close();
            return cat_id;
        }

ExecuteNonQuery() returns -1

如果可能,请不要使用AddWithValue()。实际上,当您不显式提供类型时,它会尝试隐式转换,有时隐式转换可能不是最优化的转换。您可以在此链接中找到更多讨论。

最重要的是,在赋值之前,不要忘记使用此行清除参数。

cmd.Parameters.Clears();

检查以下代码。

string sqlQuery = "INSERT INTO ItemDetails.item(description,category_id) VALUES (@item_desc,@cat_id)";
using (SqlCommand cmd = new SqlCommand(sqlQuery, con))
{
    cmd.CommandType = CommandType.Text;
    cmd.Parameters.Clears(); // Add this same line in your getcategory function.
    cmd.Parameters.Add("@item_desc", SqlDbType.VarChar, 1000).Value = txtitemdesc.Text;
    cmd.Parameters.Add("@cat_id", SqlDbType.Int).Value = GetCategoryID();
    try
    {
        con.Open();
        int result = cmd.ExecuteNonQuery();
        if (result > 0)
        {
            MessageBox.Show("Record Inserted Successfully!");
        }
        else
        {
            MessageBox.Show("Failed to add record");
        }
    }
    catch (SqlException ex)
    {
        MessageBox.Show("An error has occured! " + ex);
    }
    finally
    {
        con.Close();
    }
}