if (textBox1.Text != "")
            {
                SqlConnection connect = new SqlConnection("server=.;uid=sa;pwd=;database=student");
                connect.Open();
                SqlCommand com = new SqlCommand("select count(*) from Student where Sno='" + textBox1.Text + "'", connect);
                int count = com.ExecuteNonQuery();
                if (count > 0)
                {
                    SqlDataAdapter sda = new SqlDataAdapter("select Sname from Student where Sno='" + textBox1.Text + "'", connect);
                    DataSet ds = new DataSet();
                    sda.Fill(ds, "student");
                    textBox2.Text = ds.Tables[0].Columns.ToString();
                    //SqlCommand com = new SqlCommand("delete from Student where Sno='" + textBox1.Text + "'");
                    MessageBox.Show("报刊删除成功!", "删除成功", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
                else
                {
                    MessageBox.Show(Convert.ToString(count));
                }
                connect.Close();
运行count=-1,请教高手原因……还有如何将选择的Sname写入textbox2中……

解决方案 »

  1.   

    count=-1
    ExecuteNonQuery返回小于等于0的数,99%是查询失败
    你监听一下,看看语句是什么,执行报不报错。
      

  2.   

    ExecuteNonQuery
    对于 UPDATE、INSERT 和 DELETE 语句,返回值为该命令所影响的行数。对于所有其他类型的语句,返回值为 -1。如果发生回滚,返回值也为 -1。
    不会返回select的查询后的行数,你这个就是错误的。
      

  3.   

                    SqlConnection connect = new SqlConnection("server=.;uid=sa;pwd=;database=邮局订报管理系统");
                    connect.Open();
                    SqlCommand command = new SqlCommand("select count(*) from Paper where PNO='" + paper_id.Text + "'", connect);
                    int count = command.ExecuteNonQuery();
                    if (count > 0)
                    {
                        MessageBox.Show("此报刊号已经存在,请重新输入!", "错误提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
    你的意思是不是这句话的返回值也是-1啊?不好意思,我不太懂你说的……
      

  4.   

    改成 textBox1.Text.trim() 这样 试一下
    好像是这个 trim().  就是去掉后面的空格。textBox2.Text = ds.Tables[0].Columns.ToString();
    改成
    textBox2.Text = ds.Tables[0].Columns[1][1].ToString();
    这里的[1][1] 根据你自己的需要制定第几行第几列一个TEXT 控件属性文本只能接收一个值,你的 SqlDataAdapter sda = new SqlDataAdapter("select Sname from Student where Sno='" + textBox1.Text + "'", connect);
    有可能查询出多行多列。所以得制定行列
      

  5.   


    Sno是主码,不可能有重复的……我改了下还是不行……
      

  6.   


    SqlCommand com = new SqlCommand("select count(*) AS CNum from Student where Sno='" + textBox1.Text + "'", connect);ds = com.ExecuteDataSet();int count = ds.Tables[0].Rows[0]["CNum"];至于你想给textbox2赋值,是一样的,不过最后赋值有且只能有一个值
    只有一行数据,就是ds.Tables[0].Rows[0]["CNum"];
    多行数据需要确定是第几行那一列this.textbox2.Text = ds.Tables[0].Rows[0]["列名"].ToString();
      

  7.   

            private void 删除学生ToolStripMenuItem_Click(object sender, EventArgs e)
            {
                if (textBox1.Text != "")
                {
                    SqlConnection connect = new SqlConnection("server=.;uid=sa;pwd=;database=student");
                    connect.Open();
                    SqlCommand com = new SqlCommand("select count(*) as CNum from Student where Sno='" + textBox1.Text.Trim() + "'", connect);
                    DataSet ds=new DataSet ();
                    ds = com.ExecuteDataSet();
                    int count = ds.Tables[0].Rows[0]["CNum"];
                    //int count = com.ExecuteNonQuery();
                    if (count > 0)
                    {
                         
                        SqlDataAdapter sda = new SqlDataAdapter("select Sname from Student where Sno='" + textBox1.Text + "'", connect);
                        DataSet ds = new DataSet();
                        sda.Fill(ds, "student");
                        textBox2.Text = ds.Tables[0].Rows[0]["Sname"].ToString();
                        //SqlCommand com = new SqlCommand("delete from Student where Sno='" + textBox1.Text + "'");
                        MessageBox.Show("报刊删除成功!", "删除成功", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    }
                    else
                    {
                        MessageBox.Show(Convert.ToString(count));
                    }
                    connect.Close();
                }
            }还是不对……不能用这两句
    SqlCommand com = new SqlCommand("select count(*) AS CNum from Student where Sno='" + textBox1.Text + "'", connect);ds = com.ExecuteDataSet();int count = ds.Tables[0].Rows[0]["CNum"];
      

  8.   


    运行count=-1 就不走你的 if (count > 0)
    这个分支了。
      

  9.   

    现在问题是你使用
    int count = com.ExecuteNonQuery();
    是获取不到影响行数的,只能得到-1
    所以不会进入你的判断分支if (count > 0)
    所以,你第一步是要获取到sql返回的实际数量
    可能咱们用的获取值得方法不同,所以你用我的方法报错
    但是目的是相同的,你就要找到你所需要的返回值,在程序中接收到,才能继续下一步的判断。
    建议不要使用无返回结果集的ExecuteNonQuery,改用其他有结果集返回数据的方法
      

  10.   

    你可以试试
    ExecuteScalar
    执行查询,并返回查询所返回的结果集中第一行的第一列。 忽略其他列或行。 (重写 DbCommand.ExecuteScalar()。)int count = com.ExecuteScalar();看看能不能接收到返回值。