主题:  关于DataSet操作数据库的问题?

cmoonc

职务:普通成员
等级:1
金币:0.0
发贴:48
#12005/3/17 19:56:04
在使用DataSet操作数据库时出现了一个奇怪的问题,进行插入操作,一切正常,但更新和删除却无法使用(使用SQL语句操作一切正常),提示:
对于不返回任何键列信息的 SelectCommand 不支持 DeleteCommand 的动态 SQL 生成。

代码如下:
<% @ Page Language="C#" Debug="true" %>
<% @ Import Namespace="System.Data" %>
<% @ Import Namespace="System.Data.SqlClient" %>
<Script Language="C#" Runat="Server">
public void Page_Load(Object src,EventArgs e)
{
string conns="User Id=chang;password=sa;Initial Catalog=office;Data Source=CL";
string comms="select * from test";
SqlConnection conn=new SqlConnection(conns);
DataSet datas=new DataSet();
SqlDataAdapter ada=new SqlDataAdapter(comms,conn);
ada.Fill(datas,"test";

datas.Tables["test"].Rows[8].Delete(); //删除命令,确定有此行存在

/* DataTable dt=datas.Tables["test"];
DataRow dr=dt.Rows[8];
dr["content"]="Posting"; 此更新也无法执行,出现相同问题*/

/* DataTable dt=datas.Tables["test"];
DataRow dr=dt.NewRow();
dr["content"]="abcdefg";
dr["date"] ="2001-1-1";
dr["count"] =100;
dt.Rows.Add(dr); 只有此添加语句可正常运行*/

SqlCommandBuilder ccb=new SqlCommandBuilder(ada);
ada.DeleteCommand=ccb.GetDeleteCommand(); //此行提示出错,在使用不同命令时,此行已作相应修改.
ada.Update(datas,"test";
dg.DataSource=datas.Tables["test"];
dg.DataBind();
}
</script>



cmoonc

职务:普通成员
等级:1
金币:0.0
发贴:48
#22005/3/18 12:10:55
经过试验我又发现,对ACCESS的数据库操作一切正常,就是对SQL数据库操作出错,如果说数据库设置有问题为何用CommandSql方法就可以正常操作,换成DataSet就不行?



cmoonc

职务:普通成员
等级:1
金币:0.0
发贴:48
#32005/3/18 16:01:47
终于找到问题之所在,乐死我了,原来用DataSet对数据库进行写操作,必须在数据库中有一个设为主键的唯一序列(例如常用的ID)!否则就回出错,我上面的程序可都是正确的



风花雪夜

职务:普通成员
等级:1
金币:0.0
发贴:53
#42005/3/19 14:05:03
cmoonc在上个帖子中说
引用:
在使用DataSet操作数据库时出现了一个奇怪的问题,进行插入操作,一切正常,但更新和删除却无法使用(使用SQL语句操作一切正常),提示:
对于不返回任何键列信息的 SelectCommand 不支持 DeleteCommand 的动态 SQL 生成。

代码如下:
<% @ Page Language="C#" Debug="true" %>
<% @ Import Namespace="System.Data" %>
<% @ Import Namespace="System.Data.SqlClient" %>
<Script Language="C#" Runat="Server">
public void Page_Load(Object src,EventArgs e)
{
string conns="User Id=chang;password=sa;Initial Catalog=office;Data Source=CL";
string comms="select * from test";
SqlConnection conn=new SqlConnection(conns);
DataSet datas=new DataSet();
SqlDataAdapter ada=new SqlDataAdapter(comms,conn);
ada.Fill(datas,"test";

datas.Tables["test"].Rows[8].Delete(); //删除命令,确定有此行存在

/* DataTable dt=datas.Tables["test"];
DataRow dr=dt.Rows[8];
dr["content"]="Posting"; 此更新也无法执行,出现相同问题*/

/* DataTable dt=datas.Tables["test"];
DataRow dr=dt.NewRow();
dr["content"]="abcdefg";
dr["date"] ="2001-1-1";
dr["count"] =100;
dt.Rows.Add(dr); 只有此添加语句可正常运行*/

SqlCommandBuilder ccb=new SqlCommandBuilder(ada);
ada.DeleteCommand=ccb.GetDeleteCommand(); //此行提示出错,在使用不同命令时,此行已作相应修改.
ada.Update(datas,"test";
dg.DataSource=datas.Tables["test"];
dg.DataBind();
}
</script>



风花雪夜

职务:普通成员
等级:1
金币:0.0
发贴:53
#52005/3/19 14:16:38
DataRow dr=datas.Tables["test"].Row[8];