数据添加成功,但是数据库数据没有更新是怎么回事?急!急!

hxianling 2009-08-02 04:46:16
数据添加成功,但是数据库数据没有更新是怎么回事?急!急!请高手告诉我一下。
...全文
1744 36 打赏 收藏 转发到动态 举报
写回复
用AI写文章
36 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhangtianrong 2011-01-06
  • 打赏
  • 举报
回复
我也遇到这们的问题为什么 我在数据访问层添加数据都能成功,调试继点都能进入到 int result = command.ExecuteNonQuery()这句话;而且返回

的result也有值,但是在数据库的表没有添加数据,是怎么回事,急,急
flyerwing 2009-08-06
  • 打赏
  • 举报
回复
scmd.ExecuteNonQuery()>0
才对的!
JF
chenruoyun 2009-08-06
  • 打赏
  • 举报
回复
int rows=scmd.ExecuteNonQuery();
if(rows>0)
{
Response.Write(" <script language='javascript'>alert('添加成功!');
}
else
{
Response.Write(" <script language='javascript'>alert('添加失败.!');
}
lizheng19860824 2009-08-06
  • 打赏
  • 举报
回复
你这代码不管执行成功与否都会弹出“添加成功”窗口的,在执行的时候加个判断语句吧
firesea 2009-08-06
  • 打赏
  • 举报
回复
你没有明白 sp1234 的意思,他是说,你这样写代码是有漏洞的,可以被sql注入。你是用拼串的方式写的sql语句,这样要是人家也输入一个你sql语句里面的符号,这样你的sql语句就不能正常执行了。你应该是用参数化的方法传递参数,这样可以避免sql注入的。至于你的问题嘛,如果像你说的能在gradview里面取到你更新的结果,那说明已经插入成功了,你把表关掉,重新打开下(或者刷新表)应该就有你要的数据了。
hxianling 2009-08-06
  • 打赏
  • 举报
回复
哪位高手解决过这样的问题的加我QQ帮我解决一下,谢谢!!我的QQ:568223360
hxianling 2009-08-06
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 sp1234 的回复:]
引用 6 楼 hxianling 的回复:
引用 4 楼 haha0308 的回复:
能不能把你的代码贴出来啊,这样不好结决啊。

if (kong())
        {
            //定义变量
            string yy, aa, bb, cc, dd, ee, ff, gg, hh, ii;
            //aa = this.TextBox1.Text;//riqi
            yy = this.TextBox1.Text;//rukuID
            aa =DateTime.Now.ToString("yyyy-MM-dd");
            bb = this.TextBox2.Text;//danhao
            cc = this.TextBox3.Text;//mingcheng
            dd = this.TextBox4.Text;//shuliang
            ee = this.TextBox5.Text;//jinhuojia
            ff = this.TextBox6.Text;//zonge
            gg = this.TextBox7.Text;//beizhu
            hh = this.DropDownList1.Text;
            ii = this.DropDownList2.Text;

            SqlConnection scon = new SqlConnection(ConfigurationManager.AppSettings["ConnectionString"]);
            scon.Open();
            SqlCommand scmd = new SqlCommand("insert into ruku(rukuID,rukuDate,rukuBianma,huoName,shuliang,jinjia,zhonge,beizhu,ghdw,jingbanren) values ('"+ yy + "','" + aa + "','" + bb + "','" + cc + "','" + dd + "','" + ee + "','" + ff + "','" + gg + "','" + hh + "','" + ii + "')", scon);
            scmd.ExecuteNonQuery();
            scmd.Dispose();
            scon.Close();
            Response.Write(" <script language='javascript'>alert('添加成功!'); </script>");
            Server.Transfer("rukujetj.aspx");
        }


像这样的代码,甚至不用测试,我这里都肯定都看不过去。很简单,如果客户打入单引号,例如TextBox7值中有单引号,难道你的SQL就要报销?用户可以轻易地写SQL注入代码,随便找个特殊输入测试数据就能发现数据库完全错误。
[/Quote]你这么说,我看你是不是不明白我说出现的问题呢?既然都可以显示在gridview里面,为什么说数据库完全错误呢?如果说数据库有误,那代码怎么可以执行?
nsl204 2009-08-06
  • 打赏
  • 举报
回复
我估计你这里应该是数据的类型和数据库不一致,或者是数据库的中字段
的长度不够长。
你所谓的添加成功是执行了Response.Write(" <script language='javascript'>alert('添加成功!'); </script>"); 这个代码吧?

你可以试试这个
try {
int i=scmd.ExecuteNonQuery();
if(i>0)
{
Response.Write(" <script language='javascript'>alert('添加成功!'); </script>");
}
else
{
Response.Write(" <script language='javascript'>alert('添加失败!'); </script>");
}
}
catch(Exception ex)
{
string err=ex.Message();//如果出现异常,看看err的值
}
scmd.Dispose();
scon.Close();

hxianling 2009-08-06
  • 打赏
  • 举报
回复
都没有try {}catrh(){},都没有判断变量,怎么就知道添加成功了?
如果数据库没有更新,那么肯定就是没添加成功
try {}catrh(){},这个只是捕捉异常而已,到底用不用跟数据库更新有问题吗?添加不成功,怎么可以在gridview里面显示?现在最主要的问题是数据库没有更新,而不是捕捉异常!!你明白我所问的问题吗?
javakiki 2009-08-06
  • 打赏
  • 举报
回复
都没有try {}catrh(){},都没有判断变量,怎么就知道添加成功了?
如果数据库没有更新,那么肯定就是没添加成功
hxianling 2009-08-06
  • 打赏
  • 举报
回复
firesea这位高手我知道你会解决这个问题,但是我按你说的去做了,数据库还是没有显示我新的数据,能否加我的QQ帮我解决一下?谢谢了!我的QQ:568223360
ruanwei1987 2009-08-06
  • 打赏
  • 举报
回复
引用一下:
“连接未关闭,连接的当前状态为已打开”C#的问题。

我遇见过这样的问题 你可以看看上一个窗体或者别的窗体

有没有关闭

如果没有关闭的话 这段代码也会出现异常的

加油!!!
Lizzy莲 2009-08-06
  • 打赏
  • 举报
回复
[Quote=引用 26 楼 hxianling 的回复:]
引用 23 楼 chenruoyun 的回复:
int rows=scmd.ExecuteNonQuery();
if(rows>0)
{
  Response.Write(" <script language='javascript'>alert('添加成功!');
}
else
{
  Response.Write(" <script language='javascript'>alert('添加失败.!');
}
         
我添加了这些代码进去,出现这样的错误提示ExecuteNonQuery 要求已打开且可用的连接。连接的当前状态为已关闭。怎么解决呢?
[/Quote]

你是不是把
scmd.Dispose();
scon.Close();
放在上面代码前面了?
li1229363 2009-08-06
  • 打赏
  • 举报
回复
连基本安全都没有做。很好很强大
zzxap 2009-08-06
  • 打赏
  • 举报
回复
都没有判断一下数据库变量就“添加成功”好搞笑
icbc_ljt 2009-08-06
  • 打赏
  • 举报
回复
这个简单,数据层操作时先判断连接有没打开,没打开再打开连接。
hxianling 2009-08-06
  • 打赏
  • 举报
回复
[Quote=引用 23 楼 chenruoyun 的回复:]
int rows=scmd.ExecuteNonQuery();
if(rows>0)
{
  Response.Write(" <script language='javascript'>alert('添加成功!');
}
else
{
  Response.Write(" <script language='javascript'>alert('添加失败.!');
}
         
[/Quote]我添加了这些代码进去,出现这样的错误提示ExecuteNonQuery 要求已打开且可用的连接。连接的当前状态为已关闭。怎么解决呢?
hxianling 2009-08-06
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 firesea 的回复:]
你没有明白 sp1234 的意思,他是说,你这样写代码是有漏洞的,可以被sql注入。你是用拼串的方式写的sql语句,这样要是人家也输入一个你sql语句里面的符号,这样你的sql语句就不能正常执行了。你应该是用参数化的方法传递参数,这样可以避免sql注入的。至于你的问题嘛,如果像你说的能在gradview里面取到你更新的结果,那说明已经插入成功了,你把表关掉,重新打开下(或者刷新表)应该就有你要的数¡­
[/Quote]您说的很好,这样子说还差不多,代码漏洞是写得还不全面,而不是说代码全部是错误的!不要那么肯定的去说别人都是错的,毕竟别人也是思考过的,编写代码过程是难免出现问题,但是遇到问题要想办法去解决,解决得的办法才可以去下最后的结论。
newdigitime 2009-08-03
  • 打赏
  • 举报
回复
实际上数据已更新成功,你需要先显式的将conn.close/=nothing,然后再conn.open
,再查询数据库是否更新.
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 hxianling 的回复:]
引用 4 楼 haha0308 的回复:
能不能把你的代码贴出来啊,这样不好结决啊。

if (kong())
        {
            //定义变量
            string yy, aa, bb, cc, dd, ee, ff, gg, hh, ii;
            //aa = this.TextBox1.Text;//riqi
            yy = this.TextBox1.Text;//rukuID
            aa =DateTime.Now.ToString("yyyy-MM-dd");
            bb = this.TextBox2.Text;//danhao
            cc = this.TextBox3.Text;//mingcheng
            dd = this.TextBox4.Text;//shuliang
            ee = this.TextBox5.Text;//jinhuojia
            ff = this.TextBox6.Text;//zonge
            gg = this.TextBox7.Text;//beizhu
            hh = this.DropDownList1.Text;
            ii = this.DropDownList2.Text;

            SqlConnection scon = new SqlConnection(ConfigurationManager.AppSettings["ConnectionString"]);
            scon.Open();
            SqlCommand scmd = new SqlCommand("insert into ruku(rukuID,rukuDate,rukuBianma,huoName,shuliang,jinjia,zhonge,beizhu,ghdw,jingbanren) values ('"+ yy + "','" + aa + "','" + bb + "','" + cc + "','" + dd + "','" + ee + "','" + ff + "','" + gg + "','" + hh + "','" + ii + "')", scon);
            scmd.ExecuteNonQuery();
            scmd.Dispose();
            scon.Close();
            Response.Write(" <script language='javascript'>alert('添加成功!'); </script>");
            Server.Transfer("rukujetj.aspx");
        }
[/Quote]

像这样的代码,甚至不用测试,我这里都肯定都看不过去。很简单,如果客户打入单引号,例如TextBox7值中有单引号,难道你的SQL就要报销?用户可以轻易地写SQL注入代码,随便找个特殊输入测试数据就能发现数据库完全错误。
加载更多回复(16)

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧