读书人

搞不定啊进来帮忙啊该怎么处理

发布时间: 2012-01-28 22:06:13 作者: rapoo

搞不定啊,进来帮忙啊!
我用的Microsoft.Practices.EnterpriseLibrary.Data.Oracle;
企业库,oracle数据库,这个没关系主要是现在提示:当传递具有已修改行的 DataRow 集合时,更新要求有效的 UpdateCommand
可是我插入是正常的。
以下插入正常:
DBCommandWrapper insertCommand = db.GetSqlStringCommandWrapper( "insert into users(ID,NAME,PWD,IP) values(:ID,:NAME,:PWD,:IP) ");
insertCommand.AddInParameter( ":ID ",DbType.Int32, "ID ",DataRowVersion.Current);
insertCommand.AddInParameter( ":NAME ",DbType.String, "NAME ",DataRowVersion.Current);
insertCommand.AddInParameter( ":PWD ",DbType.String, "PWD ",DataRowVersion.Current);
insertCommand.AddInParameter( ":IP ",DbType.String, "IP ",DataRowVersion.Current);
DataRow addedRow =table.Rows.Add(new object[] {GetNewID(), "New product ", "11 ", "25 "});
int rowsAffected = db.UpdateDataSet(productsDataSet, "Products ", insertCommand,null,null,UpdateBehavior.Standard);
以下更新的就出错:
DBCommandWrapper dbCommand = db.GetSqlStringCommandWrapper( "update users set NAME=:NAME,PWD=:PWD,IP=:IP where ID=:ID ");
dbCommand.AddInParameter( ":ID ",DbType.Int32, "ID ",DataRowVersion.Current);
dbCommand.AddInParameter( ":NAME ",DbType.String, "NAME ",DataRowVersion.Current);
dbCommand.AddInParameter( ":PWD ",DbType.String, "PWD ",DataRowVersion.Current);
dbCommand.AddInParameter( ":IP ",DbType.String, "IP ",DataRowVersion.Current);
table.Rows[1][ "NAME "]= "testNAME ";
table.Rows[1][ "PWD "]= "testPWD ";
table.Rows[1][ "IP "]= "testIP ";
int rowsAffected = db.UpdateDataSet(productsDataSet, "Products ", null,null,dbCommand,UpdateBehavior.Standard);

[解决办法]
沙发

[解决办法]
没看出什么错误 ! 语句应该没什么问题
帮忙顶
[解决办法]
批量更新
Database db = DatabaseFactory.CreateDatabase();
DataSet productsDataSet = new DataSet();
string sqlCommand = "Select ProductID, ProductName, CategoryID, UnitPrice, LastUpdate From Products ";
DBCommandWrapper dbCommandWrapper = db.GetSqlStringCommandWrapper(sqlCommand);
string productsTable = "Products ";

db.LoadDataSet(dbCommandWrapper, productsDataSet, productsTable);

DataTable table = productsDataSet.Tables[productsTable];
DataRow addedRow = table.Rows.Add(new object[] {DBNull.Value, "New product ", 11, 25});
table.Rows[0][ "ProductName "] = "Modified product ";

DBCommandWrapper insertCommandWrapper = db.GetStoredProcCommandWrapper( "AddProduct ");
insertCommandWrapper.AddInParameter( "@ProductName ", DbType.String, "ProductName ", DataRowVersion.Current);
insertCommandWrapper.AddInParameter( "@CategoryID ", DbType.Int32, "CategoryID ", DataRowVersion.Current);
insertCommandWrapper.AddInParameter( "@UnitPrice ", DbType.Currency, "UnitPrice ", DataRowVersion.Current);

DBCommandWrapper deleteCommandWrapper = db.GetStoredProcCommandWrapper( "DeleteProduct ");
deleteCommandWrapper.AddInParameter( "@ProductID ", DbType.Int32, "ProductID ", DataRowVersion.Current);

DBCommandWrapper updateCommandWrapper = db.GetStoredProcCommandWrapper( "UpdateProduct ");


updateCommandWrapper.AddInParameter( "@ProductID ", DbType.Int32, "ProductID ", DataRowVersion.Current);
updateCommandWrapper.AddInParameter( "@ProductName ", DbType.String, "ProductName ", DataRowVersion.Current);
updateCommandWrapper.AddInParameter( "@LastUpdate ", DbType.DateTime, "LastUpdate ", DataRowVersion.Current);

int rowsAffected = db.UpdateDataSet(productsDataSet, "Products ", insertCommandWrapper, updateCommandWrapper,
deleteCommandWrapper, UpdateBehavior.Standard);
这里的代码来源于Quick Start,这里需要注意的就是DataRowVersion.Current,批量更新时根据具体情况选择其值。同时ExecuteScalar、UpdateDataSet等方法重载好几个不同的方法原型,您可以根据具体情况选择。
⑶注意的问题
这里需要注意的就是在执行存储过程时,有两个获取IDbCommand对象的方法:
public abstract DBCommandWrapper GetStoredProcCommandWrapper(string storedProcedureName);
public abstract DBCommandWrapper GetStoredProcCommandWrapper(string storedProcedureName, params object[] parameterValues);
如果你要缓存参数,就用第二个方法,不缓存参数就用第一个方法,因为在准备IDbCommand对象时,有下面的语句,
if (command.IsFurtherPreparationNeeded())
{
parameterCache.FillParameters(command, ParameterToken);
}
这样,在用第二个方法时,会从缓存中取参数,当你多次调用同一存储过程时,可以考虑用用第二个方法,当然,如果有必要可以缓存执行的结果,性能更佳,这将用到缓存应用程序块。



[解决办法]
具体报什么错误信息阿?

[解决办法]

我自己用的也是这个,没有错误.

LZ既然确定了是 sql语句出现了问题..那应该很好调试了的
[解决办法]

我的是StoredProcedure

但Text类型的,,带参数的好象可以.
但我前一阵用SQL数据库的时候,没调试成功最后放弃批量更新..用的一个临时表,,
先TRUNCATE TABLE
然后再插入数据的..
[解决办法]
http://blog.csdn.net/wuyxdream/archive/2005/07/15/425739.aspx
[解决办法]
sql语句出现了问题

读书人网 >C#

热点推荐