当前位置:编程学习 > C#/ASP.NET >>

UPDATE到底应该怎么写。。插入和删除都成功了,但更新怎么都不行

private void button1_Click(object sender, EventArgs e)
        {
            string jj = textBox1.Text;

            SqlConnection conn = new SqlConnection("Data Source=(local);Initial Catalog=StunetSystem;Integrated Security=True");
            conn.Open();
            string sql = "UPDATE 成绩 SET 姓名='" + this.textBox2.Text.Trim() + "',英语='" + this.textBox3.Text.Trim() + "',数学='" + this.textBox4.Text.Trim() + "',数据库='" + this.textBox5.Text.Trim() + "',经济学='" + this.textBox6.Text.Trim() + "' WHERE 学号='" + this.textBox1.Text.Trim() + "'";
            SqlCommand cmd = new SqlCommand(sql, conn);
            cmd.ExecuteNonQuery();

            int retvalue = cmd.ExecuteNonQuery(); //查看一下返回值。返回值代表当前update影响的行数:
            if(retvalue == -1)           // (代表更新失败。)
            {MessageBox.Show("修改失败");                            
            }
            if(retvalue == 0)           
             {MessageBox.Show("没有找到这位要修改的学生");
            } 
            if(retvalue == 1)      
            {
             MessageBox.Show("修改成功");
            }  
            conn.Close();  //关闭连接
            conn.Dispose();   //释放连接

执行结果每次都是“没有找到这位要修改的学生”,我的SQL语句哪里写错了吗 --------------------编程问答-------------------- 你最好参数化啊
string sql = "UPDATE 成绩 SET 姓名=@xm,英语=@yingyu,数学=@shuxue,数据库=@shujuk,经济学=@jingjixue  WHERE 学号=@xuehao";

SqlCommand cmd = new SqlCommand(sql, conn);
cmd.Parameters.AddWithValue("@xm",this.textBox2.Text);
...
  cmd.ExecuteNonQuery(); --------------------编程问答-------------------- 学号是什么类型的?数字类型的不要加单引号 --------------------编程问答-------------------- 参数化了,但结果还是老样子。。所有数据都是nchar类型的 --------------------编程问答-------------------- 你就是你的
this.textBox1.Text.Trim()
这个值,数据库中确实没有啊
仔细对照吧 --------------------编程问答-------------------- 调试一下,把SQL语句放数据库里执行就什么都清楚了 --------------------编程问答-------------------- 我觉得你的表字段都改成英文比较好些,怎么还有中文的字段。。。 --------------------编程问答--------------------
很无语
其实我觉得 前提的理论基础和规范很重要
还有就是学会断点调试
这样一个东西 可以说 写的很糟糕 --------------------编程问答-------------------- 有点乱。不想看。你用builberparar --------------------编程问答-------------------- 字段名和表名最好全是English的,还有每门课的成绩射程单精度就行了,干嘛非得varchar型。
update语句最好用传参数的形式写。 --------------------编程问答-------------------- nchar类型比较容易出问题,最好改为nvarchar类型, --------------------编程问答-------------------- 查看一下数据库,看内容有没更新了,不行就断点一下SQL语句,把这条语句放到SQL里执行一下看有没有结果。 --------------------编程问答-------------------- 我最近设计的表和字段全中文怎么啦,有什么不可以的?所有运行都正常。

你的语句缺少空格,试看+空格。

string sql = "UPDATE 成绩 SET 姓名 = '" + this.textBox2.Text.Trim() + "', 英语 = '" + this.textBox3.Text.Trim() + "', 数学 = '" + this.textBox4.Text.Trim() + "', 数据库 = '" + this.textBox5.Text.Trim() + "' , 经济学 = '" + this.textBox6.Text.Trim() + "' WHERE 学号 = '" + this.textBox1.Text.Trim() + "'"; --------------------编程问答-------------------- string sql = "UPDATE 成绩 SET 姓名 = '" + this.textBox2.Text.Trim() + "' , 英语 = '" + this.textBox3.Text.Trim() + "' , 数学 = '" + this.textBox4.Text.Trim() + "' , 数据库 = '" + this.textBox5.Text.Trim() + "' , 经济学 = '" + this.textBox6.Text.Trim() + "'  WHERE 学号 = '" + this.textBox1.Text.Trim() + "'"; --------------------编程问答-------------------- 目测楼主 在学习ado.net
你还是先学sql吧。、 --------------------编程问答-------------------- 给个断点自己调下,看你写的SQL 拼出来是什么样子的 --------------------编程问答-------------------- 同上,调试的时候执行到sql语句的时候将sql语句拷到数据库 执行下 看是不是sql语句写错了!! --------------------编程问答--------------------
引用 16 楼  的回复:
同上,调试的时候执行到sql语句的时候将sql语句拷到数据库 执行下 看是不是sql语句写错了!!
 
这种方法最直接,看下生成的sql语句是什么,放在sql直接执行就知道错在哪里 了 --------------------编程问答-------------------- 断点  把sql语句扔到数据库里面 看看 --------------------编程问答--------------------

string sql = "UPDATE 成绩 SET 姓名='" + this.textBox2.Text.Trim() + "',英语='" + this.textBox3.Text.Trim() + "',数学='" + this.textBox4.Text.Trim() + "',数据库='" + this.textBox5.Text.Trim() + "',经济学='" + this.textBox6.Text.Trim() + "' WHERE 学号='" + this.textBox1.Text.Trim() + "'";
--修改后的
string sql = "UPDATE 成绩 SET 姓名='" + this.textBox2.Text.Trim() + "',英语='" + this.textBox3.Text.Trim() + "',数学='" + this.textBox4.Text.Trim() + "',数据库='" + this.textBox5.Text.Trim() + "',经济学='" + this.textBox6.Text.Trim() + "' WHERE 学号=" + this.textBox1.Text.Trim() + "";

应该是你学号本身是ID,结果你添加了单引号出现的问题 --------------------编程问答-------------------- 数据库字段最好使用英文,还有确认学号的字段类型. --------------------编程问答-------------------- 先在数据库里把UPDATE语句写好,再应用的程序里去 --------------------编程问答-------------------- update 表名 set 字段1=“”,字段2=“” where (条件)…… --------------------编程问答-------------------- 我也碰到过这种情况,你绑定数据的方法一定要放在
if(!ispostback){
 databind(); //你的数据绑定方法
}
我也不知道为什么,但的确是这样的 --------------------编程问答--------------------
引用 23 楼  的回复:
我也碰到过这种情况,你绑定数据的方法一定要放在
if(!ispostback){
 databind(); //你的数据绑定方法
}
我也不知道为什么,但的确是这样的


这水平..... --------------------编程问答--------------------
引用 24 楼  的回复:
引用 23 楼 的回复:

我也碰到过这种情况,你绑定数据的方法一定要放在
if(!ispostback){
databind(); //你的数据绑定方法
}
我也不知道为什么,但的确是这样的


这水平.....

这水平咋了,比你J8瞎得瑟强得多……
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,