public static void ExecuteSqlTranWithIndentity(Hashtable SQLStringList)
        {
            using (SqlConnection conn = new SqlConnection(connectionString))
            {
                conn.Open();
                using (SqlTransaction trans = conn.BeginTransaction())
                {
                    SqlCommand cmd = new SqlCommand();
                    try
                    {
                        int indentity = 0;
                        //
                        foreach (DictionaryEntry myDE in SQLStringList)
                        {
                            string cmdText = myDE.Key.ToString();
                            SqlParameter[] cmdParms = (SqlParameter[])myDE.Value;
                            LogService.WriteLog(cmdText.ToString(), LogCategory.Trace, TraceEventType.Information, 5, 100);
                            foreach (SqlParameter q in cmdParms)
                            {
                                if (q.Direction == ParameterDirection.InputOutput)
                                {
                                    q.Value = indentity;
                                }
                            }
                            PrepareCommand(cmd, conn, trans, cmdText, cmdParms);
                            int val = cmd.ExecuteNonQuery();
                            foreach (SqlParameter q in cmdParms)
                            {
                                if (q.Direction == ParameterDirection.Output)
                                {
                                    indentity = Convert.ToInt32(q.Value);
                                }
                            }
                            cmd.Parameters.Clear();
                        }
                        trans.Commit();
                    }
                    catch
                    {
                        trans.Rollback();
                        throw;
                    }
                }
            }
        }
我知道这段代码是执行Sql语句。但是两个foreach (SqlParameter q in cmdParms)中的代码我实在看不出啥意思来。

解决方案 »

  1.   

    foreach (SqlParameter q in cmdParms)
    这个的目的是想取出一个可以返回的数据,定义如
    Params[4] = new SqlParameter("@TotalRecorder", SqlDbType.Int);
    Params[4].Direction = ParameterDirection.Output;
      

  2.   

    前面一个feach是输入参数设置。(其实这个是默认的,可以不设置)
    后面一个feach是输出参数设置。(这个必须设置)
      

  3.   

    主从表执行数据插入。
     第一个循环得到参数中的SQL语句。第二个循环返回的是,执行SQL语句返回的主表标识列值。