c#与数据库,如何知道查询数据库中的某个值,如何将数据库中的某个元素写入textbox中

时间:2022-09-21 19:12:28
            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中……

12 个解决方案

#1


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

#2


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

#3


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

                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


引用 4 楼  的回复:
改成 textBox1.Text.trim() 这样 试一下
好像是这个 trim(). 就是去掉后面的空格。

textBox2.Text = ds.Tables[0].Columns.ToString();
改成
textBox2.Text = ds.Tables[0].Columns[1][1].ToString();
这里的[1][1] 根据你自己的需要制定第几行第几列

……


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


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

                SqlConnection connect = new SqlConnection("server=.;uid=sa;pwd=;database=邮局订报管理系统");
             ……

看二楼,你使用的不对。试试6楼的方法。

#8


引用 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"];

至于你想给t……

        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"];

#9


引用楼主  的回复:
if (textBox1.Text != "")
  {
  SqlConnection connect = new SqlConnection("server=.;uid=sa;pwd=;database=student");
  connect.Open();
  SqlCommand com = new SqlCommand("select count(*) from Student……


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

#10


引用 8 楼  的回复:
引用 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]["CN……

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

#11


引用 10 楼  的回复:
引用 8 楼  的回复:

引用 6 楼  的回复:
SqlCommand com = new SqlCommand("select count(*) AS CNum from Student where Sno='" + textBox1.Text + "'", connect);

ds = com.ExecuteDataSet();

int count = ds.Table……

你可以试试
ExecuteScalar
执行查询,并返回查询所返回的结果集中第一行的第一列。 忽略其他列或行。 (重写 DbCommand.ExecuteScalar()。)

int count = com.ExecuteScalar();

看看能不能接收到返回值。

#12


虽然我的问题还没有解决,但是还是非常感谢你们的帮忙!!!在这里谢谢你们了啊!!!!!!!

#1


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

#2


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

#3


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

                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


引用 4 楼  的回复:
改成 textBox1.Text.trim() 这样 试一下
好像是这个 trim(). 就是去掉后面的空格。

textBox2.Text = ds.Tables[0].Columns.ToString();
改成
textBox2.Text = ds.Tables[0].Columns[1][1].ToString();
这里的[1][1] 根据你自己的需要制定第几行第几列

……


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


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

                SqlConnection connect = new SqlConnection("server=.;uid=sa;pwd=;database=邮局订报管理系统");
             ……

看二楼,你使用的不对。试试6楼的方法。

#8


引用 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"];

至于你想给t……

        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"];

#9


引用楼主  的回复:
if (textBox1.Text != "")
  {
  SqlConnection connect = new SqlConnection("server=.;uid=sa;pwd=;database=student");
  connect.Open();
  SqlCommand com = new SqlCommand("select count(*) from Student……


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

#10


引用 8 楼  的回复:
引用 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]["CN……

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

#11


引用 10 楼  的回复:
引用 8 楼  的回复:

引用 6 楼  的回复:
SqlCommand com = new SqlCommand("select count(*) AS CNum from Student where Sno='" + textBox1.Text + "'", connect);

ds = com.ExecuteDataSet();

int count = ds.Table……

你可以试试
ExecuteScalar
执行查询,并返回查询所返回的结果集中第一行的第一列。 忽略其他列或行。 (重写 DbCommand.ExecuteScalar()。)

int count = com.ExecuteScalar();

看看能不能接收到返回值。

#12


虽然我的问题还没有解决,但是还是非常感谢你们的帮忙!!!在这里谢谢你们了啊!!!!!!!