C# update所影响的行数

youngersj 2010-07-30 01:12:14
用visual 2005开发的

oracleSql = "update tableName set ifdelte = 1 where ifdelete = 0";

请问执行完这句,我想获取更新之后所影响的行数。
...全文
472 21 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
QingT26 2010-09-14
  • 打赏
  • 举报
回复
看你写得有点复杂,要是能上传的话我想把我写的一个通用的连接类给你看看。
wuzhenwz 2010-07-30
  • 打赏
  • 举报
回复
回复于: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(); // 执行, 并返回受影响的行数
}
}
meceky 2010-07-30
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 kpsanmao 的回复:]

Oracle数据库是用的C# code
oledb
吗?

Oracle在C#中使用要引用C# code
System.Data.OracleClient;

c#访问Oracle数据库用的是C# code
OracleConnection
,C# code
OracleCommand


楼上说的oledb是用来访问Access的

楼主你把C# code
oracl……
[/Quote]
对头!
youngersj 2010-07-30
  • 打赏
  • 举报
回复
呵呵,比较乱,大家能看则看一下哈
youngersj 2010-07-30
  • 打赏
  • 举报
回复
在界面的代码如下
//信息修改成功
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);
}

以上大致就是这样,谢谢大家
youngersj 2010-07-30
  • 打赏
  • 举报
回复
问题解决了,谢谢大家,我把我的贴出来
zhushoudong 2010-07-30
  • 打赏
  • 举报
回复
连接数据库所用的类库没用对了吧
编程爱好者L 2010-07-30
  • 打赏
  • 举报
回复
private static SqlConnection conn;

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;
}
这样写 什么都解决了.
寂静的神经 2010-07-30
  • 打赏
  • 举报
回复
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就是影响的记录数

或者

//conn是指数据库连接OracleConnnection的名字,换成你的数据库连接对象的名字
OracleCommand com = conn.CreateCommand();
int i =com.ExecuteNonQuery("update tableName set ifdelte = 1 where ifdelete = 0",conn);
//返回的i就是影响的记录数
dancingbit 2010-07-30
  • 打赏
  • 举报
回复
没有看到Update方法,如果有,在里面增加一个Update方法的重载,返回该信息。
kiba518 2010-07-30
  • 打赏
  • 举报
回复
灌水 10分~~
youngersj 2010-07-30
  • 打赏
  • 举报
回复
多谢多谢,我正在试……不过还是有点迷糊。
在涉及到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);
}
}

所以我现在不知道该怎么办了
blue_maple 2010-07-30
  • 打赏
  • 举报
回复
用封装的自己写一个db连接 或者修改封装的dbhelp类增加一个返回影响函数的方法
hao1hao2hao3 2010-07-30
  • 打赏
  • 举报
回复
SqlCommand 用的是SQL Server中的类。你用的是Oracle的数据库就要像2楼说的一样用OleDbCommand才行。
dancingbit 2010-07-30
  • 打赏
  • 举报
回复
如果是被封装了,并且封装的方法中丢弃了这些信息,那你是无法获取到这些信息的。

顺便说一句,如果是Oracle数据库,那么使用的就不会是SqlCommand之类,而是System.Data.OracleClient命名空间中的相应类如OracleCommand。
youngersj 2010-07-30
  • 打赏
  • 举报
回复
…………
chazikai24 2010-07-30
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 youngersj 的回复:]
我在网上看到这样解决

SqlCommand.ExecuteNonQuery 方法
对连接执行 Transact-SQL 语句并返回受影响的行数。
用ExecuteNonQuery方法...

参与代码:
SqlCommand SqlCmd = new SqlCommand(sql, this.SqlCon);
int rows = SqlCmd.ExecuteNonQuery()……
[/Quote]
没懂你的意思。
conn.open();
string sql ="";
sqlcommand cmd = new sqlcommand(sql,conn);

int r = command.ExecuteNonQuery();



实在不行,你就再执行个sql语句,查询ifdelete = 0的有多少行
select count(*) from table where ifdelete = 0
youngersj 2010-07-30
  • 打赏
  • 举报
回复
我在网上看到这样解决

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);
}
现在的问题是如何在这个基础上获取它更新后影响的行数

hyblusea 2010-07-30
  • 打赏
  • 举报
回复

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(); // 执行, 并返回受影响的行数
}
}

blue_maple 2010-07-30
  • 打赏
  • 举报
回复
executeNonQuery

111,097

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧