……
MyDataAdapter.SelectCommand = MyCommand;
DataSet MyDataSet = new DataSet();
MyDataAdapter.Fill(MyDataSet,"table");
OleDbCommandBuilder MyCommandBuild = new OleDbCommandBuilder(MyDataAdapter);//!!注意:关联DataSet和数据库的操作!!!
{
//操作
MyDataSet.Tables["table"].Rows[0][0] = "ss";//更新DataSet中第一行第一列的值
//……
}
MyDataAdapter.Update(MyDataSet,"table");//将DataSet中”table”表中的数据提交给数据库,完成数据库的更新
MyConnection.Close();
MyDataAdapter.SelectCommand = MyCommand;
DataSet MyDataSet = new DataSet();
MyDataAdapter.Fill(MyDataSet,"table");
OleDbCommandBuilder MyCommandBuild = new OleDbCommandBuilder(MyDataAdapter);//!!注意:关联DataSet和数据库的操作!!!
{
//操作
MyDataSet.Tables["table"].Rows[0][0] = "ss";//更新DataSet中第一行第一列的值
//……
}
MyDataAdapter.Update(MyDataSet,"table");//将DataSet中”table”表中的数据提交给数据库,完成数据库的更新
MyConnection.Close();
解决方案 »
- 去掉DevExpress gridControl控件表头上的的默认英文字母
- WPF,标记扩展学不懂
- C# WebClient下载文件大小为0,没报错,求解
- 向C++ 过渡到C#的老牛提问,C#调用C++里DLL含带接口指针参数的函数
- 如何用C#写QQ客户端
- 关于Wpf的Fluent Ribbon问题。
- POS机打印
- 关于DataGrid的一个小问题
- 这个删除按钮烦死我了,怎么也调不通!!!(源码)
- 如何改变ListView中某一个单元格的背景色和字体颜色
- 如何获取Oracle数据库中的CLOB字段的值,为什么我得到的是乱码一堆,不管存入表中的是中文还是英文.
- 紧急求教:关于timer1_Tick中调用WebServices的问题(winform)
myDataAdapter = new OleDbDataAdapter();
myDataAdapter.SelectCommand = new OleDbCommand(str_Sql, myConn);
myCommandBuilder = new OleDbCommandBuilder(myDataAdapter);myConn.Open();
myDataAdapter.Update(myDataSet.Tables[0].GetChanges());
myConn.Close();
我很想知道为什么我的办法不行,我以前用过这种办法的,感觉很好用,不过那个类是操作SQL的,现在是操作DB2的,想想该没有什么问题的,类文件不复杂,用到的代码俺都粑上了
"对于不返回任何基表信息的SelectCommand不支持动态SQL生成。"
不知道这句话是什么意思,有没有解决的办法。
Avoiding the CommandBuilder Object
http://www.theserverside.net/articles/showarticle.tss?id=OptimizingADONETyou can write your own Insert/Delete/Update command, see
http://www.csharpfriends.com/Articles/getArticle.aspx?articleID=103
这是界面层代码:
string strSQL=string.Format("SELECT * FROM UTEST");
DataSet ds =db.GetData(strSQL);
DataRow myRow;
for(int i=0;i<3;i++)
{
myRow=ds.Tables[0].NewRow();
myRow["TEST"] = i.ToString();
ds.Tables[0].Rows.Add(myRow);
}
bool isOK = db.OdbcUpdate(ds);这是数据层代码:
public bool OleDbUpdate(DataSet ds)
{
try
{
DataTable dt = ds.Tables[0];
string strSQL = string.Format("SELECT * FROM {0}",dt.TableName);
OleDbDataAdapter da = new OleDbDataAdapter(strSQL, conn != null ? conn : new OleDbConnection(strConn));
OleDbCommandBuilder MyCB = new OleDbCommandBuilder(da);
DataSet dss = new DataSet(dt.TableName);
dss = ds.Copy();
da.Update(dss,dt.TableName);
return true;
}
catch(Exception ex)
{
throw ex;
}
}public bool OdbcUpdate(DataSet ds)
{
try
{
string con = "DSN=bzbjDB;UID=DBO;PWD=DBO;MODE=SHARE;LONGDATACOMPAT=1;GRAPHIC=1;LOBMAXCOLUMNSIZE=2048575;DBALIAS=bzbjDB;";
OdbcConnection ODBC_conn = new System.Data.Odbc.OdbcConnection(con);
ODBC_conn.Open(); DataTable dt = ds.Tables[0];
string strSQL = string.Format("SELECT * FROM {0}",dt.TableName);
OdbcDataAdapter da = new OdbcDataAdapter(strSQL, ODBC_conn != null ? ODBC_conn : new OdbcConnection(strConn));
OdbcCommandBuilder MyCB = new OdbcCommandBuilder(da);
DataSet dss = new DataSet(dt.TableName);
dss = ds.Copy();
da.Update(dss,dt.TableName);
return true;
}
catch(Exception ex)
{
throw ex;
}
}如果我调用OleDbUpdate则失败,
提示"对于不返回任何基表信息的SelectCommand不支持动态SQL生成。"
如果我调用OdbcUpdate则成功....
而且我在界面层写通过dataset更改记录的代码,不能成功执行(现在是通过dataset新增记录的代码可以执行),搞不懂,按照思归的意思应该是都不能执行吧?(因为表里没有primary key)
这里我比较糊涂,还请大家赐教
我个人认为使用此功能不是很灵活的而且效率上也不高
灵活的方式就是构建sql串提交数据库执行,这样就完全避免了前面的限制
这样操作数据是很容易控制的
linaren的说法给了我一些启发,不过我还是不很清楚,例如用构建sql串提交数据库执行的示例代码可否提供参考下
langmafeng的文章我大概看了下,确实是好文章,我已收藏,争取尽快吸收,谢了
为什么我这种方式效率不高?
怎么才能用构建sql串提交数据库执行解决1次插入9条记录?
为什么OleDbUpdate和OdbcUpdate有截然不同的结果?