以前也是用c/s的,感觉直接用datagrid有种excel的感觉,用户使用时可能会感觉更好,界面也更简洁,所以才有这了个想法

解决方案 »

  1.   

    事务很难用吗 SqlConnection con = new SqlConnection(strCon);
        public string aaa(string sql1,string sql2)
        {
            con.Open();
            SqlTransaction sta = con.BeginTransaction(IsolationLevel.RepeatableRead, "aaa");//RepeatableRead: 在查询中使用的所有数据上放置锁,以防止其他用户更新这些数据。防止不可重复的读取,但是仍可以有幻像行。
            SqlCommand cmd = con.CreateCommand();
            cmd.Connection = con;
            cmd.Transaction = sta;        try
            {            cmd.CommandText = sql1;
                cmd.ExecuteNonQuery();
                cmd.CommandText = sql2;
                cmd.ExecuteNonQuery();
                sta.Commit();
                return "success";
            }
            catch (Exception e)
            {
                try
                {
                    sta.Rollback();
                }
                catch (SqlException ex)
                {
                    if (sta.Connection != null)
                    {
                        return "An exception of type " + ex.GetType().ToString();
                    }
                }
                return e.GetType().ToString();
            }
            finally
            {
                con.Close();
            }
        }
      

  2.   

    事务的隔离级别 // 摘要:
        //     指定连接的事务锁定行为。
        public enum IsolationLevel
        {
            // 摘要:
            //     正在使用与指定隔离级别不同的隔离级别,但是无法确定该级别。
            Unspecified = -1,
            //
            // 摘要:
            //     无法改写隔离级别更高的事务中的挂起的更改。
            Chaos = 16,
            //
            // 摘要:
            //     可以进行脏读,意思是说,不发布共享锁,也不接受独占锁。
            ReadUncommitted = 256,
            //
            // 摘要:
            //     在正在读取数据时保持共享锁,以避免脏读,但是在事务结束之前可以更改数据,从而导致不可重复的读取或幻像数据。
            ReadCommitted = 4096,
            //
            // 摘要:
            //     在查询中使用的所有数据上放置锁,以防止其他用户更新这些数据。防止不可重复的读取,但是仍可以有幻像行。
            RepeatableRead = 65536,
            //
            // 摘要:
            //     在 System.Data.DataSet 上放置范围锁,以防止在事务完成之前由其他用户更新行或向数据集中插入行。
            Serializable = 1048576,
            //
            // 摘要:
            //     通过在一个应用程序正在修改数据时存储另一个应用程序可以读取的相同数据版本来减少阻止。表示您无法从一个事务中看到在其他事务中进行的更改,即便重新查询也是如此。
            Snapshot = 16777216,
        }
      

  3.   

    在SQL语句里面加上个判断就可以了,注意,是在SQL语句里加
    IF EXISTS(SELECT 1 FROM YourTable WHERE YourCondition)
    BEGIN
        ...//Your Code Here
    END
    这样就不会提示了楼主的问题我以前也遇到过,如果你更新或删除一个表的时候,而你想更新或删除的记录不存在的时候,你没加上任何判断的话,就会出现这种情况.
    在SQL查询分析器里面,加判断和不加判断下面显示的结果是不一样的,个人感觉bindingNavigator应该是根据这个结果来进行判断的.
      

  4.   

    最好不要真正的Delete一条数据  我们一般是加一个bit型的字段去标识修改时 先判断这个字段是 0 还是 1 在进行不同操作
      

  5.   

    关键我是用 dataSet11、bindingSource1、bindingNavigator 自动实现的  增加、修改、删除都是vs实现的,
    我是建的dataset1.xsd 在里面加的tableAdapter ,就没有sql语句。
      

  6.   

    [Quote=引用 9 楼 fengjian_428 的回复:]
    事务很难用吗 
    关键我是用 dataSet11、bindingSource1、bindingNavigator 自动实现的  增加、修改、删除都是vs实现的, 
    我是建的dataset1.xsd 在里面加的tableAdapter ,就没有sql语句。
      

  7.   

    刚才试了一下,DataSet.xsd里面的查询,更新语句都是可以自己编辑的,把默认的SQL语句用你自己的替换掉就好了
      

  8.   


    datagrid 里那么多记录 我得判断多少啊  我是在datagrid里直接添加、修改的