{
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%是查询失败
你监听一下,看看语句是什么,执行报不报错。
ExecuteNonQuery返回小于等于0的数,99%是查询失败
你监听一下,看看语句是什么,执行报不报错。
#2
ExecuteNonQuery
对于 UPDATE、INSERT 和 DELETE 语句,返回值为该命令所影响的行数。对于所有其他类型的语句,返回值为 -1。如果发生回滚,返回值也为 -1。
不会返回select的查询后的行数,你这个就是错误的。
对于 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);
有可能查询出多行多列。所以得制定行列
好像是这个 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
看二楼,你使用的不对。试试6楼的方法。
#8
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
运行count=-1 就不走你的 if (count > 0)
这个分支了。
#10
现在问题是你使用
int count = com.ExecuteNonQuery();
是获取不到影响行数的,只能得到-1
所以不会进入你的判断分支if (count > 0)
所以,你第一步是要获取到sql返回的实际数量
可能咱们用的获取值得方法不同,所以你用我的方法报错
但是目的是相同的,你就要找到你所需要的返回值,在程序中接收到,才能继续下一步的判断。
建议不要使用无返回结果集的ExecuteNonQuery,改用其他有结果集返回数据的方法
#11
你可以试试
ExecuteScalar
执行查询,并返回查询所返回的结果集中第一行的第一列。 忽略其他列或行。 (重写 DbCommand.ExecuteScalar()。)
int count = com.ExecuteScalar();
看看能不能接收到返回值。
#12
虽然我的问题还没有解决,但是还是非常感谢你们的帮忙!!!在这里谢谢你们了啊!!!!!!!
#1
count=-1
ExecuteNonQuery返回小于等于0的数,99%是查询失败
你监听一下,看看语句是什么,执行报不报错。
ExecuteNonQuery返回小于等于0的数,99%是查询失败
你监听一下,看看语句是什么,执行报不报错。
#2
ExecuteNonQuery
对于 UPDATE、INSERT 和 DELETE 语句,返回值为该命令所影响的行数。对于所有其他类型的语句,返回值为 -1。如果发生回滚,返回值也为 -1。
不会返回select的查询后的行数,你这个就是错误的。
对于 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);
有可能查询出多行多列。所以得制定行列
好像是这个 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
看二楼,你使用的不对。试试6楼的方法。
#8
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
运行count=-1 就不走你的 if (count > 0)
这个分支了。
#10
现在问题是你使用
int count = com.ExecuteNonQuery();
是获取不到影响行数的,只能得到-1
所以不会进入你的判断分支if (count > 0)
所以,你第一步是要获取到sql返回的实际数量
可能咱们用的获取值得方法不同,所以你用我的方法报错
但是目的是相同的,你就要找到你所需要的返回值,在程序中接收到,才能继续下一步的判断。
建议不要使用无返回结果集的ExecuteNonQuery,改用其他有结果集返回数据的方法
#11
你可以试试
ExecuteScalar
执行查询,并返回查询所返回的结果集中第一行的第一列。 忽略其他列或行。 (重写 DbCommand.ExecuteScalar()。)
int count = com.ExecuteScalar();
看看能不能接收到返回值。
#12
虽然我的问题还没有解决,但是还是非常感谢你们的帮忙!!!在这里谢谢你们了啊!!!!!!!