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

解决方案 »

  1.   

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

  2.   

    没懂你的意思。
    conn.open();
    string sql ="";
    sqlcommand cmd = new sqlcommand(sql,conn);int r = command.ExecuteNonQuery();   实在不行,你就再执行个sql语句,查询ifdelete = 0的有多少行
    select count(*) from table where ifdelete = 0
      

  3.   

    如果是被封装了,并且封装的方法中丢弃了这些信息,那你是无法获取到这些信息的。顺便说一句,如果是Oracle数据库,那么使用的就不会是SqlCommand之类,而是System.Data.OracleClient命名空间中的相应类如OracleCommand。
      

  4.   

    SqlCommand  用的是SQL Server中的类。你用的是Oracle的数据库就要像2楼说的一样用OleDbCommand才行。
      

  5.   

    用封装的自己写一个db连接 或者修改封装的dbhelp类增加一个返回影响函数的方法
      

  6.   

    多谢多谢,我正在试……不过还是有点迷糊。
    在涉及到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);
                }
            }所以我现在不知道该怎么办了
      

  7.   

    没有看到Update方法,如果有,在里面增加一个Update方法的重载,返回该信息。
      

  8.   

    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就是影响的记录数
      

  9.   

    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;
            }
    这样写 什么都解决了.
      

  10.   

    在界面的代码如下
     //信息修改成功                     
                            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);
            }以上大致就是这样,谢谢大家 
            
      

  11.   

    回复于:2010-07-30 13:18:08
    C# codestatic private void CreateOleDbCommand(
        string queryString, string connectionString)
    {
        using (OleDbConnection connection = new 
                   OleDbConnection(connectionString))
        {
            connection.Open();
            OleDbCommand command = new 
                OleDbCommand(queryString, connection);
            intRows = command.ExecuteNonQuery();   // 执行, 并返回受影响的行数
        }
    }