C# update所影响的行数

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

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

请问执行完这句,我想获取更新之后所影响的行数。
...全文
457 21 打赏 收藏 转发到动态 举报
写回复
用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
1、SqlConnection类   构造函数:SqlConnection(connstr);   属性:  Database//获取当前数据库或连接打开后要使用的数据库的名称        Connectionstring//获取或设置用于打开 SQL Server 数据库的字符串   方法:  Open()        Close()        Dispose()//释放所有资源         2、SqlCommand类     构造函数:SqlCommand(string,conn) 属性:  CommandType//获取或设置一个值,该值指示如何解释 CommandText 属         CommandText //获取或设置要对数据源执行SQL 语句         Connection//获取或设置 SqlCommand 的此实例使用的 SqlConnection         Parameters//获取 SqlParameterCollection。参数集合 方法:  ExecuteNonQuery(): 返回受影响函数,如增、删、改操作;         ExecuteScalar():执行查询,返回首行首列的结果;         ExecuteReader():返回一个数据流(SqlDataReader对象)。   实例1: SqlCommand cmd = new SqlCommand () cmd.connection =conn; cmd.CommandType = CommandType.Text; cmd.CommandText ="select *from produce=@ID"; cmd.Parameters.Add("@ID",SqlDBType.NVarChar,10,ID).values=1; cmd.ExecuteScalar();   实例2:   SqlCommand cmd = new SqlCommand (“select *from test”,conn);   cmd.ExecuteScalar(); 注意: ExecuteNonQuery()方法主要用户更新数据,通常它使用Update,Insert,Delete语句来操作数据库,其方法返回值意义:对于 Update,Insert,Delete 语句 执行成功是返回值为该命令所影响行数,如果影响行数为0时返回的值为0,如果数据操作回滚得话返回值为-1,对于这种更新操作 用我们平时所用的是否大于0的判断操作应该没有问题而且比较好,但是对于其他的操作如对数据库结构的操作,如果操作成功时返回的却是-1,这种情况跟我们平时的思维方式有点差距所以应该好好的注意了, 3、SqlDataReader类   是由ExecuteReader()返回一个数据流(SqlDataReader对象)没有构造方法   属性:Connection//获取与 SqlDataReader 关联的 SqlConnection。      FieldCount//获取当前行中的列数。      HasRows//获取一个值,该值指示 SqlDataReader 是否包含一行或多行      RecordsAffect//获取执行 Transact-SQL 语句所更改、插入或删除的行数   方法:Read();//使 SqlDataReader 前进到下一条记录      GetType();//获取当前实例的 Type      NextResult();//当读取批处理 Transact-SQL 语句的结果时,使数据读取器前进到下一个结果 4、SqlDataApater类   构造方法:SqlDataApater()        SqlDataAdapter(SqlCommand)//初始化 SqlDataAdapter 类的新实例,用指定的 SqlCommand 作为 SelectCommand 的属性。        SqlDataApater(string,conn)//使用 SelectCommand 和 SqlConnection 对象初始化 SqlDataAdapter 类的一个新实例   属性:  DeleteCommand        SelectCommand        InsertCommand        UpdataCommand              方法:  Fill(DataSet)//在 DataSet 中添加或刷新行        Fill(DataTable)//在 DataSet 的指定范围中添加或刷新行,以与使用 DataTable 名称的数据源中的行匹配。 (继承自DbDataAdapter。        Update(DataRow[])//通过为 DataSet 中的指定数组中的每个已插入、已更新或已删除的行执行相应的 INSERT、UPDATE 或 DELETE 语句来更新数据库中的值        Update(DataSet)//通过为指定的 DataTable 中的每个已插入、已更新或已删除的行执行相应的 INSERT、UPDATE 或 DELETE 语句来更新数据库中的值        Update(DataTable) 实例1   // 隐藏了SqlCommand对象的定义,同时隐藏了SqlCommand对象与SqlDataAdapter对象的绑定 SqlDataAdapter myda= new SqlDataAdapter("select * from test",conn);   实例2   SqlCommand mySqlCommand = new SqlCommand();// 创建SqlCommand   mySqlCommand.CommandType = CommandType.Text;   mySqlCommand.CommandText = "select * from product";   mySqlCommand.Connection = sqlCnt;   SqlDataAdapter myDataAdapter = new SqlDataAdapter();   // 创建SqlDataAdapter   myDataAdapter.SelectCommand = mySqlCommand; // 为SqlDataAdapter对象绑定所要执行的SqlCommand对象 5、DataSet类     命名空间:System.Data.DataSet。   数据集,本地微型数据库,可以存储多张表。  //使用DataSet第一步就是将SqlDataAdapter返回的数据集(表)填充到Dataset对象中:   SqlDataAdapter myDataAdapter = new SqlDataAdapter("select * from product", sqlCnt); DataSet myDataSet = new DataSet(); // 创建DataSet myDataAdapter.Fill(myDataSet, "product"); // 将返回的数据集作为“表”填入DataSet中,表名可以与数据库真实的表名不同,并不影响后续的增、删、改等操作 //访问dataset中的数据 DataTable myTable = myDataSet.Tables["product"]; foreach (DataRow myRow in myTable.Rows) { foreach (DataColumn myColumn in myTable.Columns) { Console.WriteLine(myRow[myColumn]); //遍历表中的每个单元格 } } // 修改DataSet DataTable myTable = myDataSet.Tables["product"]; foreach (DataRow myRow in myTable.Rows) { myRow["name"] = myRow["name"] + "商品"; } // 将DataSet的修改提交至“数据库” SqlCommandBuilder mySqlCommandBuilder = new SqlCommandBuilder(myDataAdapter); myDataAdapter.Update(myDataSet, "product"); // 添加一行 DataRow myRow = myTable.NewRow(); myRow["name"] = "捷安特"; myRow["price"] = 13.2; //myRow["id"] = 100; id若为“自动增长”,此处可以不设置,即便设置也无效 myTable.Rows.Add(myRow); // 将DataSet的修改提交至“数据库” SqlCommandBuilder mySqlCommandBuilder = new SqlCommandBuilder(myDataAdapter); myDataAdapter.Update(myDataSet, "product"); // 删除第一行 DataTable myTable = myDataSet.Tables["product"]; myTable.Rows[0].Delete(); SqlCommandBuilder mySqlCommandBuilder = new SqlCommandBuilder(myDataAdapter); myDataAdapter.Update(myDataSet, "product");
简介(Introduction) 免费的源代码行数统计工具,支持20多种代码格式。具有统计迅速、准确的优点,是程序开发人员的必备工具。可以对 C++、VB.Net、VB、C#、JAVA、Delphi、ASP.Net、ASP、JSP、PHP、HTML 等项目的代码行数、工数和成本进行统计,并能保存统计的结果。 下载地址(Download) http://boomworks.googlecode.com/files/sourcecounter-2.1.24.11.7z 主要功能和特点(Features) 1. 统计速度快、准确 2. 支持对 20 多种代码格式进行统计 3. 支持多目录和包含子目录的统计方式 4. 能够计算代码的人月数和成本 5. 支持统计结果保存为 .CSV 文件格式(可以方便地导入到 Excel) 6. 支持多国语言界面(英文、简体中文、繁体中文、日语等) 7. 支持自由选择要统计的代码格式 主要更新(Update) * 2.1.24.11 - B O O M 2008/11/24 o 修正不能统计 .C 扩展名代码问题 o 追加关于对话框 boomworks.net 连接 * 2.1.22.4 - B O O M 2008/11/16 o 开始支持对 PHP 代码的统计 o 更新 ASPX 代码统计的算法 * 2.1.14.75 - B O O M 2008/11/08 o 增加计算代码的人月数和成本的功能 * 2.0.10.61版 - B O O M 2008/11/1 o .csv 统计结果保存格式更改 o 支持多国语言界面(英文、简体中文、繁体中文、日语等) * 2.0.1.1 - B O O M 2008/10/23 o 支持多路径统计 o 支持更多文件格式 * 1.6.6.4 版 - B O O M 2006/1/26 o 支持对 ASP 和 HTML 文件的统计 o 保存统计源代码的文件夹路径 联系我们(Contact) * boomworks@gmail.com * boomworks@hotmail.com

110,499

社区成员

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

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

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