C# update所影响的行数
用visual 2005开发的oracleSql = "update tableName set ifdelte = 1 where ifdelete = 0";
请问执行完这句,我想获取更新之后所影响的行数。 --------------------编程问答-------------------- executeNonQuery --------------------编程问答--------------------
--------------------编程问答-------------------- 我在网上看到这样解决
static private void CreateOleDbCommand(
string queryString, string connectionString)
{
using (OleDbConnection connection = new
OleDbConnection(connectionString))
{
connection.Open();
OleDbCommand command = new
OleDbCommand(queryString, connection);
intRows = command.ExecuteNonQuery(); // 执行, 并返回受影响的行数
}
}
SqlCommand.ExecuteNonQuery 方法
对连接执行 Transact-SQL 语句并返回受影响的行数。
用ExecuteNonQuery方法...
参与代码:
SqlCommand SqlCmd = new SqlCommand(sql, this.SqlCon);
int rows = SqlCmd.ExecuteNonQuery();
不返回数据集用ExecuteNonQuery
返回数据集填充到datatable后用DataTable.Rows.Count
但是我这里调用oracle连接都是封装过了,就是这句new SqlCommand(sql, this.SqlCon)没有办法用到,我那是一层层调用的
public static int DeleteOneTablesData(string tableName)
{
try
{
DataSet ds = DBOperation.FillDataSet_SQL(SqlList.DeleteOneTablesData(tableName));
if (ds != null && ds.Tables[0] != null && ds.Tables[0].Rows.Count > 0)
{
return Convert.ToInt32(string.IsNullOrEmpty(ds.Tables[0].Rows[0][0].ToString())
? 0 : ds.Tables[0].Rows[0][0]);
}
else
{
return -1;
}
}
catch (Exception ex)
{
throw ex;
}
}
然后调用sqlList文件的方法
public static string DeleteOneTablesData(string tableName)
{
return string.Format("update {0} set ifdelete = 1 where ifdelete = 0", tableName);
}
现在的问题是如何在这个基础上获取它更新后影响的行数
--------------------编程问答--------------------
没懂你的意思。
conn.open();
string sql ="";
sqlcommand cmd = new sqlcommand(sql,conn);
int r = command.ExecuteNonQuery();
实在不行,你就再执行个sql语句,查询ifdelete = 0的有多少行
select count(*) from table where ifdelete = 0 --------------------编程问答-------------------- ………… --------------------编程问答-------------------- 如果是被封装了,并且封装的方法中丢弃了这些信息,那你是无法获取到这些信息的。
顺便说一句,如果是Oracle数据库,那么使用的就不会是SqlCommand之类,而是System.Data.OracleClient命名空间中的相应类如OracleCommand。 --------------------编程问答-------------------- SqlCommand 用的是SQL Server中的类。你用的是Oracle的数据库就要像2楼说的一样用OleDbCommand才行。 --------------------编程问答-------------------- 用封装的自己写一个db连接 或者修改封装的dbhelp类增加一个返回影响函数的方法 --------------------编程问答-------------------- 多谢多谢,我正在试……不过还是有点迷糊。
在涉及到oracle连接的时候有两个文件,一个是DBOperation.cs
里面是这样的一堆方法
namespace JurenTutorCRM.DB
{
public class DBOperation
{
public DBOperation()
{
//
// TODO: Add constructor logic here
//
}
#region FillDataSet
/// <summary>
/// 填充数据集——存储过程-不带参数
/// </summary>
/// <param name="proname">存取过程名</param>
/// <returns></returns>
public static DataSet FillDataSet(string proname)
{
DataSet dr = new DataSet();
OracleHelper.FillDataset(OracleHelper.connString, CommandType.StoredProcedure, proname, dr, new string[] { "tables" });
return dr;
}
/// <summary>
/// 填充数据集——sql语句-不带参
/// </summary>
/// <param name="sqlText"></param>
/// <returns></returns>
public static DataSet FillDataSet_SQL(string sqlText)
{
DataSet dr = new DataSet();
OracleHelper.FillDataset(OracleHelper.connString, CommandType.Text, sqlText, dr, new string[] { "tables" });
return dr;
}
/// <summary>
/// 填充数据集——sql语句-带参数
/// </summary>
/// <param name="sqlText">sql语句</param>
/// <param name="parms">参数</param>
/// <returns></returns>
public static DataSet FillDataSet_SQL(string sqlText, OracleParameter[] parms)
{
DataSet dr = new DataSet();
OracleHelper.FillDataset(OracleHelper.connString, CommandType.Text, sqlText, dr, new string[] { "tables" }, parms);
return dr;
}
public static DataSet FillDataSet_SQL(OracleTransaction tr, string sqlText)
{
DataSet dr = new DataSet();
OracleHelper.FillDataset(tr, CommandType.Text, sqlText, dr, new string[] { "tables" });
return dr;
}
然后还有一个文件是OracleHelper.cs
里面是一堆这样的方法
public static void FillDataset(string connectionString, CommandType commandType, string commandText, DataSet dataSet, string[] tableNames)
{
if (connectionString == null || connectionString.Length == 0) throw new ArgumentNullException("connectionString");
if (dataSet == null) throw new ArgumentNullException("dataSet");
// Create & open a OracleConnection, and dispose of it after we are done
using (OracleConnection connection = new OracleConnection(connectionString))
{
connection.Open();
// Call the overload that takes a connection in place of the connection string
FillDataset(connection, commandType, commandText, dataSet, tableNames);
}
}
所以我现在不知道该怎么办了 --------------------编程问答-------------------- 灌水 10分~~ --------------------编程问答-------------------- 没有看到Update方法,如果有,在里面增加一个Update方法的重载,返回该信息。 --------------------编程问答-------------------- Oracle数据库是用的
oledb吗?
Oracle在C#中使用要引用
System.Data.OracleClient;
c#访问Oracle数据库用的是
OracleConnection,
OracleCommand等
楼上说的oledb是用来访问Access的
楼主你把
oracleSql = "update tableName set ifdelte = 1 where ifdelete = 0";
换成
//conn是指数据库连接OracleConnnection的名字换成你的数据库连接对象的名字
OracleCommand com = conn.CreateCommand();
com.CommandText="update tableName set ifdelte = 1 where ifdelete = 0";
int i =com.ExecuteNonQuery();
//返回的i就是影响的记录数
或者
--------------------编程问答-------------------- private static SqlConnection conn;
//conn是指数据库连接OracleConnnection的名字,换成你的数据库连接对象的名字
OracleCommand com = conn.CreateCommand();
int i =com.ExecuteNonQuery("update tableName set ifdelte = 1 where ifdelete = 0",conn);
//返回的i就是影响的记录数
public static SqlConnection Conn
{
get
{
if (conn == null)
{
conn = new SqlConnection(ConfigurationManager.ConnectionStrings["conn"].ToString());
conn.Open();
}
else if (conn.State == ConnectionState.Closed)
{
conn.Open();
}
else if (conn.State == ConnectionState.Broken)
{
conn.Close();
conn.Open();
}
return conn;
}
}
/// <summary>
/// 返回受影响行数方法(添删改公共调用的方法)
/// </summary>
/// <param name="sql"></param>
/// <param name="pmts"></param>
/// <returns></returns>
public static int ExcuteQuery(string sql, SqlParameter[] pmts)
{
SqlCommand comm = new SqlCommand(sql, Conn);
if (pmts != null)
{
comm.Parameters.AddRange(pmts);
}
int rows = comm.ExecuteNonQuery();
return rows;
}
这样写 什么都解决了. --------------------编程问答-------------------- 连接数据库所用的类库没用对了吧 --------------------编程问答-------------------- 问题解决了,谢谢大家,我把我的贴出来 --------------------编程问答-------------------- 在界面的代码如下
//信息修改成功
ShowMessageBox.ShowOKButtonInfomationBox(ClientFormResource.AlterSuccess,
ClientFormResource.MessageCaption);
// 更新影响行数
int returnRow = Convert.ToInt32(logicFactory.DeleteOneTableData(strTablesName));
//刷新
ShowData(1);
调用逻辑层LogicFactory.cs
/// <summary>
/// 获取更新表所影响的行数
/// </summary>
/// <param name="tableName"></param>
/// <returns></returns>
public int DeleteOneTableData(string tableName)
{
return Admin.Admin.DeleteOneTableData(tableName);
}
调用逻辑文件 admin.cs
/// <summary>
/// 获取更新表所影响的行数
/// </summary>
/// <param name="tableName"></param>
/// <returns></returns>
public static int DeleteOneTableData(string tableName)
{
return DBOperation.ExecuteReturnNum(SqlList.DeleteOneTableData(tableName));
调用sqlList文件
/// <summary>
/// 获取更新表所影响的行数
/// </summary>
/// <param name="tableName"></param>
/// <returns></returns>
public static string DeleteOneTableData(string tableName)
{
return string.Format("update {0} set ifdelete = 1 where ifdelete = 0",tableName);
}
和数据层DBOperation.cs,
/// <summary>
/// 攻取更新表影响行数
/// </summary>
/// <param name="sql"></param>
/// <returns></returns>
//(这个方法是我自己在DB封装里添加的)
public static int ExecuteReturnNum(string sql)
{
int i = OracleHelper.ExecuteNonQuery(OracleHelper.connString, CommandType.Text, sql);
return i;
}
oracle连接调用
public static int ExecuteNonQuery(string connectionString, CommandType commandType, string commandText)
{
// Pass through the call providing null for the set of SqlParameters
return ExecuteNonQuery(connectionString, commandType, commandText, (OracleParameter[])null);
}
以上大致就是这样,谢谢大家
--------------------编程问答-------------------- 呵呵,比较乱,大家能看则看一下哈 --------------------编程问答--------------------
对头! --------------------编程问答-------------------- 回复于:2010-07-30 13:18:08
C# code
static private void CreateOleDbCommand(
string queryString, string connectionString)
{
using (OleDbConnection connection = new
OleDbConnection(connectionString))
{
connection.Open();
OleDbCommand command = new
OleDbCommand(queryString, connection);
intRows = command.ExecuteNonQuery(); // 执行, 并返回受影响的行数
}
}
--------------------编程问答-------------------- --------------------编程问答-------------------- 看你写得有点复杂,要是能上传的话我想把我写的一个通用的连接类给你看看。
补充:.NET技术 , C#