比如我要保存2个表,A表1个记录,B表2个记录,其中B表包含A表外键。如果按照普通的情况,需要打开三次库,依次插入。这样就造成资源浪费,并且无法使用事务对数据一致性进行保护。可不可以将table直接抛到SQL里。直接在数据库里进行分解插入呢?请高手帮忙,十分感谢。 

解决方案 »

  1.   

    可以是不成问题。SQL可以通过触发器实现。
    但是怕你这样做导致以后存储过程不好维护。
    C#中也有事务可以保证数据库更改的一致性,进而保证数据的完整性。
    你可以参照下面这段代码:再加之数据适配器完成!public static int updatePasswordFun(string LoginUserName, string OldPassword, string NewPassword)
            {//启动事务处理,修改密码
                string dateOldPassword = MyMd5(OldPassword);
                string dateNewPassword = MyMd5(NewPassword);
                System.Data.SqlClient.SqlConnection conn = GetConn();
                conn.Open();
                SqlTransaction orderTrans = conn.BeginTransaction();
                SqlCommand cmd = new SqlCommand("updatePassword", conn);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Transaction = orderTrans;
                int result = 1;
                try
                {
                    cmd.Parameters.Add("@LoginUserName", System.Data.SqlDbType.VarChar, 20).Value = LoginUserName;
                    cmd.Parameters.Add("@OldUserPassword", System.Data.SqlDbType.VarChar, 100).Value = dateOldPassword;
                    cmd.Parameters.Add("@NewUserPassword", System.Data.SqlDbType.VarChar, 100).Value = dateNewPassword;
                    cmd.Parameters.Add("@returnvalue", System.Data.SqlDbType.Int);
                    cmd.Parameters["@returnvalue"].Direction = ParameterDirection.ReturnValue;
                    cmd.ExecuteNonQuery();
                    orderTrans.Commit();
                    result = Convert.ToInt32(cmd.Parameters["@returnvalue"].Value);
                }
                catch
                {
                    orderTrans.Rollback();
                }
                finally
                {
                    conn.Close();
                    conn.Dispose();
                }
                return result;
            }
      

  2.   

    谢谢朋友们的帮助。不过该问题的解决方法我是通过向sql传xml参数来解决的,我认为为了保证数据的完整性应该从数据底层来进行处理。