关于数据库更新的问题,100分不够再送
private void button3_Click(object sender, System.EventArgs e)
{
try
{
SqlConnection myconn=new SqlConnection(fdch.sqlconnstr.sqlconn());
SqlCommand cmd=new SqlCommand();
cmd.Connection=myconn;
cmd.CommandText="querystate";
cmd.CommandType=CommandType.StoredProcedure;
//SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand=cmd;
DataSet ds = new DataSet ( );
da.Fill(ds,"statearea");
SqlCommandBuilder dc=new SqlCommandBuilder(da);
dataGrid1.SetDataBinding(ds,"statearea");
myconn.Close();
}
catch(System.Data.SqlClient.SqlException ee)
{
MessageBox.Show("出错了"+ee.ToString());
}
}
private void button4_Click(object sender, System.EventArgs e)
{
da.Update((DataSet)dataGrid1.DataSource,"statearea");
}
这样对数据库的更新就有用,但如果把它们放到一个类中就不行
private void button3_Click(object sender, System.EventArgs e)
{
try
{
ExecuteProcedure myep=new ExecuteProcedure();
myep.procedurename="querystate";
myep.tablename="statearea";
dataGrid1.SetDataBinding(myep.allquery(),myep.tablename);
}
catch(System.Data.SqlClient.SqlException ee)
{
MessageBox.Show("ûÓÐÕâ¸ö¼Ç¼"+ee.ToString());
}
}
private void button4_Click(object sender, System.EventArgs e)
{
try
{
DataSet de=new DataSet();
de=(DataSet)dataGrid1.DataSource;
ExecuteProcedure myep=new ExecuteProcedure();
myep.tablename="statearea";
myep.updata(myep.allquery(),myep.tablename);
}
catch(System.Data.SqlClient.SqlException ee)
{
MessageBox.Show("ûÓÐÕâ¸ö¼Ç¼"+ee.ToString());
}
}
类文件是:
public DataSet allquery()
{
myconn.Open();
SqlCommand cmd=new SqlCommand();
cmd.Connection=myconn;
cmd.CommandText=procedurename;
cmd.CommandType=CommandType.StoredProcedure;
myda1.SelectCommand=cmd;
SqlCommandBuilder dc=new SqlCommandBuilder(myda1);
DataSet myds=new DataSet();
myda1.Fill(myds,tablename);
return myds;
}
public void updata(DataSet de,string tablename)
{
///myconn.Open();
SqlCommandBuilder dc=new SqlCommandBuilder(myda1);
myda1.Update(allquery(),tablename);
}
myda1为全局变量
错在
"当传递具有已修改行的datarow集合时,更新要求有效的updatacommand“
谁有更新的代码,是用存储过程查询后,再更新到数据库,是封装在一个类中的,对任何表都可以用的,,只要把存储名和表名改也就行了,也就是说是一个查询更新类公共类
问题点数:0、回复次数:12Top
1 楼lgqTiger(【老虎】(抵制日货...))回复于 2004-05-03 00:07:52 得分 0
添加一个OleDbCommandBuilder 的变量就可以了!
详细请看:
http://expert.csdn.net/Expert/topic/2950/2950161.xml?temp=.3154261Top
2 楼huangsuipeng(hsp|I love foxpig)回复于 2004-05-03 00:17:43 得分 0
SQL HELPERTop
3 楼zhjboss(小张)回复于 2004-05-03 07:02:48 得分 0
SqlCommandBuilder dc=new SqlCommandBuilder(myda1);
我不是加了吗?Top
4 楼cowbi(庆宝宝)回复于 2004-05-03 09:27:22 得分 0
public static DataSet allquery()
把它声明成静态的看看,建议还是跟踪一下Top
5 楼zhjboss(小张)回复于 2004-05-03 09:37:50 得分 0
我知道为什么直接在按钮中写代码可以,是因为myda1这个没有变化,
把它们放到一个类中,当查询时, 再返回更新时,mydal已经不是原来查询时myda了,因此不行,但我不知道怎么改写Top
6 楼zhjboss(小张)回复于 2004-05-14 07:26:17 得分 0
谁还有比较好的方法吗?Top
7 楼zhjboss(小张)回复于 2004-06-09 06:44:46 得分 0
谁有比较好的方法中Top
8 楼hivak47(比尔)回复于 2004-06-09 08:25:30 得分 0
用SQL语句实现比较简单。Top
9 楼haohaohaohao()回复于 2004-06-09 08:33:11 得分 0
你的数据集变量应该设置成全局的静态变量就可以了!因为你是在不同的函数中操作该数据集的!!Top
10 楼wuzhijie(阿杰)回复于 2004-06-09 11:07:18 得分 0
DataSet myds=new DataSet();
myds=allquery();
myda1.Update(myds,tablename);
Top
11 楼zhjboss(小张)回复于 2004-06-09 15:49:43 得分 0
但只能更新一个表啊Top
12 楼zhjboss(小张)回复于 2004-06-29 10:02:49 得分 0
还是不行啊Top




