st = (int)mycomm.ExecuteScalar();这里你上面都没出错这里肯定是大于1的了,肯定不会小于0的了,你说说你想要达到什么样的效果的吧,感觉你这样写的好奇葩

解决方案 »

  1.   


    object obj = mycomm.ExecuteScalar();
     if(obj == System.DBNull .Value)
     {
        string sql = "update CafeVip set firstName='" + txtFirstName.Text + "',familyName='" + txtFamilyName.Text + "',orderTime='" + txtOrderTime.Text + "',Telephone=" + txtTelephone.Text + ",favriteCafe='" + txtFavriteCafe.Text + "',orderTable=" + txtOrderTable.Text + ",address='" + txtAddress.Text + "' where tID=" + tID;
                    try
                    {
                        OleDbCommand mycomn = new OleDbCommand(sql, myOleConn);
                        mycomn.ExecuteNonQuery();
                        RefreshDG();
                        txtFirstName.Text = "";
                        txtFamilyName.Text = "";
                        txtTelephone.Text = "";
                        txtFavriteCafe.Text = "";
                        txtOrderTime.Text = "";
                        txtAddress.Text = "";
                        txtOrderTable.Text = "";
                    }
                    catch (Exception eb)
                    {
                        MessageBox.Show(eb.Message);
                    }
                    btnAdd.Enabled = true;
                    btnDel.Enabled = true;
                    btnEdit.Enabled = true;
                    btnModify.Enabled = false;
                }
                else
                {
                    MessageBox.Show("对不起,不能修改,因为此时间段的该桌已经被预定"); }
      

  2.   

    ExcuteScalar并返回查询所返回的结果集中第一行的第一列,如果没有结果,返回的是NULL或者是DBNull.Value,可以用空值的判断方式。
      

  3.   


    我想表达的就是当txtOrderTime.Text和txtOrderTable.Text同时等于表里的ordertime和ordertable时提示错误信息,有一个不等于就可以修改成功
      

  4.   

    那你这样要先获取表里的ordertime和ordertable的值来和你的txtOrderTime.Text和txtOrderTable.Text进行判断先,判断成立就提示错误,不成立就写你更新表的代码,这样写才行的,你上面写的逻辑都不对的
      

  5.   

    谢谢啦,不过按这种方法修改后,当orderTime= txtOrderTime.Text 和 orderTable=" + txtOrderTable.Text 的时候,我还是可以修改,我希望他俩同时相等时是提示错的
      

  6.   

    问题出在你那个判断上面;
    导致执行else语句块有两种:1 sql语句执行成功,返回受影响行数  2 sql 语句没执行成功;如 select count(*) from task where false;   这条语句的返回结果是:0  
    当结果是0 的时候,你的if语句判断也不成功;   所以结果不是你想要的
      

  7.   

    string str = " select count(*) from CafeVip where orderTime='" + txtOrderTime.Text + "' and orderTable=" + txtOrderTable.Text + "";            OleDbCommand mycomm = new OleDbCommand(str, myOleConn);            int st = -1;            st = (int)mycomm.ExecuteScalar();这里不应该取执行结果影响的行数作为判断条件,
    select count(*) from CafeVip  这语句不管where 条件是true 还是 false 它执行结果的影响行数永远是1正确的做法是取执行结果的记录集,然后取记录集第一行第一列的值,判断它是否大于0,如果大于0,表示该桌已经被预定