【问题标题】:executenonquery not working in for loopexecutenonquery 在 for 循环中不起作用
【发布时间】:2013-04-10 20:22:55
【问题描述】:

在数据库中:

Alter Procedure Update_MaterialTransactionsto2ForWithdrawal
  @materialName varchar(50),
  @staffNumber varchar(10),
  @description varchar(50),
  @transactionID int
As
Begin
   Update Table_MaterialTransactions
   set Status=2
   where StaffNumber = @staffNumber 
     and CrossSection = @description 
     and SubSubCategory = @materialName 
     and Status = 1 
     and TransactionID = @transactionID
End

在数据访问层:

public static void UpdateMaterial(string staffNumber,string materialName,string description,int transaction)
{
    SqlConnection connection = new SqlConnection(ConnectDatabase.ReturnConnectionString());
    //I am passing connection string as the parameter

    try
    {
        connection.Open();
        SqlCommand cmd = new SqlCommand("Update_MaterialTransactionsto2ForWithdrawal", connection);

        cmd.CommandType = CommandType.StoredProcedure;

        cmd.Parameters.Clear();
        cmd.Parameters.Add("@materialName", SqlDbType.Varchar, 50).Value = materialName;
        cmd.Parameters.Add("@staffNumber", SqlDbType.Varchar, 50).Value = staffNumber;
        cmd.Parameters.Add("@description", SqlDbType.Varchar, 50).Value = description;
        cmd.Parameters.Add("@transactionID", SqlDbTypeInt).Value = transactionID;

        int i = cmd.ExecuteNonQuery();

        connection.Close();
    }
    catch(Exception ex)
    {
       connection.Close();
    }

在客户端:

void btnSubmit_Click(Object sender,EventArgs e)
{
   int j=0,k=0;

   for(int i=0;i<transactions.Count;i++)
   {
       string id = "ctl00$ContentPlaceHolder1$" + i.ToString();

       CheckBox chk=(CheckBox)Page.FindControl(id);

       if(chk.Checked == true)
       {
            Objects.UpdateMaterial(staffNumbers[i].ToString(), materials[i].ToString(), descriptions[i].ToString(), Convert.ToInt32(transactions[i]));

            j++;
       }
       else
       {
            Objects.DeleteTheSelectedRowOfMaterialTransaction(staffNumbers[i].ToString(), materials[i].ToString(), descriptions[i].ToString(), Convert.ToInt32(transactions[i]));

            k++;
        }
   }

我在表格中有复选框,当用户选中复选框并单击提交时,选中的复选框将更新数据库。

但是cmd.ExecuteNonQuery() 没有执行,它返回 0 行。它没有抛出任何错误。但是,如果我在数据库中手动执行此操作,则存储过程可以正常工作。

请告诉我哪里出错了。

【问题讨论】:

  • 你的 staffNumbeer 和其他变量在哪里被声明
  • 我没有发布整个代码...您在客户端代码中看到的Thje staffNumbers 是一个数组列表..我检查了调试,..正确的参数正在从 Web 应用程序传递给查询.但是 executenonquery 返回 0 行受影响。它也没有抛出任何错误。
  • 您在添加参数时的 stff 编号大小为 50,并且在数据库中的大小为 10....
  • 有区别吗..我的员工人数是 7 即
  • 你的对象类中有任何变量名transactionID

标签: c# asp.net


【解决方案1】:

尝试在过程中添加最后一行

Return @@Rowcount

【讨论】:

  • 好的,然后使用 SQL 分析器检查更新查询的确切执行情况,通过这样做,您将了解更新查询的问题。
猜你喜欢
  • 1970-01-01
  • 2017-04-13
  • 2013-12-31
  • 2017-01-14
  • 2011-07-21
  • 2016-02-05
  • 2014-02-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多