注册 登录
编程论坛 ASP.NET技术论坛

[求助]为什么提交不了数据库呢,已解决呢(答案在20楼)

beblue 发布于 2007-04-20 16:46, 1113 次点击

下面是通过DataSet在student数据表中增加一个记录的代码
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" Debug="true" %>
<%@ import Namespace="System.Data "%>
<%@ import Namespace="System.Data.SqlClient" %>
<html>

<head runat="server">
<title>无标题页</title>
</head>
<script language="c#" runat="server" >
void page_load(object serder,EventArgs e)
{
SqlConnection sqlcon=new SqlConnection("Data Source=127.0.0.1;uid=sa;pwd=;Initial Catalog=chapter");
DataSet ds=new DataSet();
sqlcon.Open();
SqlDataAdapter sqld=new SqlDataAdapter("select * from student",sqlcon);
SqlCommandBuilder objcmdbld=new SqlCommandBuilder(sqld);
sqld.Fill(ds,"tabstudent");
DataRow drow;
drow=ds.Tables["tabstudent"].NewRow ();
drow[0]="97070705";
drow[1]="huang";
drow[2]=30;
drow[3]="bejing";
ds.Tables["tabstudent"].Rows.Add(drow);
ds.Tables["tabstudent"].AcceptChanges();
sqld.Update(ds, "tabstudent");
dg.DataSource=ds.Tables["tabstudent"].DefaultView;
dg.DataBind();
sqlcon.Close();
sqlcon=null;
labContent.Text+="添加记录成功";

}

</script>
<body>
<form id="form1" runat="server">
<asp:DataGrid ID="dg" runat="server" /><br />

<asp:Label ID="labContent" runat="server" /><br />

</form>
</body>
</html>


成功运行后结果如下:


只有本站会员才能查看附件,请 登录



然后我再用以下代码查找数据库表记录:

<%@ Page Language="C#" %>
<%@ import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.SqlClient" %>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>实验(5)-显示所有用户的情况</title>
</head>
<script language="c#" runat="server" >
void page_load(object serder, EventArgs e)
{
SqlConnection sqlcon = new SqlConnection("Data Source=127.0.0.1;uid=sa;pwd=;Initial Catalog=chapter");
DataSet ds = new DataSet();
sqlcon.Open();
SqlDataAdapter sqld = new SqlDataAdapter("select * from student", sqlcon);
sqld.Fill(ds, "tabstudent");
dg.DataSource = ds.Tables["tabstudent"].DefaultView;
dg.DataBind();
sqlcon.Close();
sqlcon = null;
labContent.Text += "查找成功";
}

</script>

<body>
<form id="form1" runat="server">
<asp:DataGrid ID="dg" runat="server" /><br />
<asp:Label ID="labContent" runat="server" /><br />
</form>
</body>
</html>
结果如下:

只有本站会员才能查看附件,请 登录



发现刚刚先提交的记录并没有更新到数据库表中啊,这是为什么,哪里错了呢

我的数据库名为chapter,,表student,,字段说明如下
studentid char(8)

name char(10)

age int (4)

address varchar(50)




问题转移到十七楼

[此贴子已经被作者于2007-4-24 23:38:45编辑过]

19 回复
#2
冰镇柠檬汁儿2007-04-20 16:53
我倒是见到过像楼主这么写添加修改记录的,可是我从来都没这么写过,因为它影响程序的效率,也是一般有经验的程序员不会用到的方式
#3
beblue2007-04-20 16:59

嗯,我还没学到通过WEB输入再提交数据的那里,,


我一步一步来的,,帮我看看上面的问题吧,,PL版主

#4
song5052007-04-20 17:20

我好象没有看到你有把数据更新到数据库的代码,而你第二段代码却是从数据库里读取出来的.当然会没有了.你只是把数据添加到DS里面了,应该还要加上写入数据库的语句.
ds.Tables["tabstudent"].Rows.Add(drow)
ds.Tables["tabstudent"].AcceptChanges();
sqld.Update(ds, "tabstudent"); //这里只是更新了DS表,DS表是一个内存中的数据库

dg.DataSource=ds.Tables["tabstudent"].DefaultView;
dg.DataBind();
sqlcon.Close();
sqlcon=null;
labContent.Text+="添加记录成功";

#5
beblue2007-04-20 17:38
ds.Tables["tabstudent"].Rows.Add(drow);
ds.Tables["tabstudent"].AcceptChanges();
sqld.Update(ds, "tabstudent");
dg.DataSource=ds.Tables["tabstudent"].DefaultView;
dg.DataBind();
sqlcon.Close();
sqlcon=null;
labContent.Text+="添加记录成功";

楼上的,你的语句我已经加了,,,

谁再帮我看看啊,
#6
冰镇柠檬汁儿2007-04-20 17:42
看来这次我是帮不了你了,楼主,我只会用sql写,并且我知道写sql这样的效率很高
#7
beblue2007-04-20 17:43
我倒,,我就是在等你过来解决啊,,等了一下午


还有谁来照顾下新手啊,
#8
冰镇柠檬汁儿2007-04-20 17:51

drow=ds.Tables["tabstudent"].NewRow ();
drow[0]="97070705";
drow[1]="huang";
drow[2]=30;
drow[3]="bejing";
ds.Tables["tabstudent"].Rows.Add(drow);
会不会是因为30没有加双引号呢

如果不是请告诉我你要插入的表的字段名和字段的类型,只要你需要插入的字段的信息

[此贴子已经被作者于2007-4-20 17:53:11编辑过]

#9
beblue2007-04-20 17:59

studentid char(8)

name char(10)

age int (4)

address varchar(50)

#10
冰镇柠檬汁儿2007-04-20 18:09

SqlConnection sqlcon=new SqlConnection("Data Source=127.0.0.1;uid=sa;pwd=;Initial Catalog=chapter");
sqlcon.Open();

string strInsert = "insert into tabstudent(studentid, name, age, address) values('97070705', 'huang', 30, 'bejing')";
SqlCommend myComm = new SqlCommend(strInsert, sqlcon);

myComm.ExecuteNonQuery();

sqlcon.Close();

labContent.Text+="添加记录成功";

最后再绑定DataGrid就可以了

[此贴子已经被作者于2007-4-20 18:10:16编辑过]

#11
beblue2007-04-20 18:21
编译器错误信息: CS0246: 找不到类型或命名空间名称“SqlCommend”(是否缺少 using 指令或程序集引用?)


行 16: SqlCommend myComm = new SqlCommend(strInsert, sqlcon);

这个?
#12
beblue2007-04-20 18:42

版主们都很辛苦,先吃个饭有空再来讨论吧

#13
球球2007-04-20 20:11
四楼说得没错.
按版主的方法来.
SqlCommand写错了.
B/S结构要注重程序的效率.
#14
beblue2007-04-20 20:29

void page_load(object serder,EventArgs e)
{
SqlConnection sqlcon=new SqlConnection("Data Source=127.0.0.1;uid=sa;pwd=;Initial Catalog=chapter");
DataSet ds=new DataSet();
sqlcon.Open();
string strInsert = "insert into tabstudent(studentid, name, age, address) values('97070705', 'huang', 30, 'bejing')";
SqlCommand myComm = new SqlCommand(strInsert, sqlcon);

myComm.ExecuteNonQuery();

ds.Tables["tabstudent"].AcceptChanges();

dg.DataSource=ds.Tables["tabstudent"].DefaultView;
dg.DataBind();
myComm = null;
sqlcon.Close();
sqlcon=null;
labContent.Text+="添加记录成功";

}
这样写是不是还少了点什么呢,提示tabstudent无效

[此贴子已经被作者于2007-4-20 20:30:23编辑过]

#15
beblue2007-04-20 20:38
用commamd.最后应该怎么提交到数据表呢
#16
球球2007-04-20 23:24

DataTable dt = new DataTable();
SqlDataAdapter sqld = new SqlDataAdapter("select * from student", sqlcon);
sqld.Fill(dt);
dg.DataSource = dt;
dg.DataBind();

[此贴子已经被作者于2007-4-20 23:27:58编辑过]

#17
beblue2007-04-23 01:37

终天知道在哪里错了,,多了这一句
ds.Tables["tabstudent"].AcceptChanges();
不过还不是很明白为什么多了这一句数据表就更新不了呢

#18
球球2007-04-23 01:44
哈哈.
AcceptChanges()方法就是将行的状态变成Unchanged.
一般在提交数据库以后使用,当然在asp.net中意义不大.因为每次使用完DataSet以后,
马上就删除对象了.
不要在update()之前使用,不然等于白改了.
#19
beblue2007-04-23 01:55
汗汗,,既然是unchanged怎么取一个acceptchanges啊,唬人嘛,郁闷
#20
beblue2007-04-24 23:37
DataTable包含的DataRow有一个RowSate属性,用来记录行的状态,它是个只读属性,由系统自动控制;初始从数据库读出记录时所有行状态都为unchanged,当修改了某字段的值,该行就自动标记Modified,类似地,新增/删除的行也是自动标记其状态;
当调用Update方法是,系统自动检索出状态不为unchanged的行,并且根据这些行的状态自动生成insert/update/delete的SQL语句,从而更新到数据库
而AcceptChanged方法的作用是把当前所有行的状态都置为unchanged,那么Update就没有效果了;它应该放在Update之后,表示当前更改已经更新到数据库了,可以继续进行新的修改了
1