当前位置:编程学习 > C#/ASP.NET >>

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

--------------------编程问答--------------------
引用 3 楼 youngersj 的回复:
我在网上看到这样解决

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

参与代码:
SqlCommand SqlCmd = new SqlCommand(sql, this.SqlCon);
int rows = SqlCmd.ExecuteNonQuery()……

没懂你的意思。
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就是影响的记录数

或者

//conn是指数据库连接OracleConnnection的名字,换成你的数据库连接对象的名字
OracleCommand com = conn.CreateCommand();
int i =com.ExecuteNonQuery("update tableName set ifdelte = 1 where ifdelete = 0",conn);
//返回的i就是影响的记录数
--------------------编程问答-------------------- 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;
        }
这样写 什么都解决了. --------------------编程问答-------------------- 连接数据库所用的类库没用对了吧 --------------------编程问答-------------------- 问题解决了,谢谢大家,我把我的贴出来 --------------------编程问答-------------------- 在界面的代码如下
 //信息修改成功                     
                        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);
        }

以上大致就是这样,谢谢大家 
         --------------------编程问答-------------------- 呵呵,比较乱,大家能看则看一下哈 --------------------编程问答--------------------
引用 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……

对头! --------------------编程问答-------------------- 回复于: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#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,