2014年3月2日 星期日

SQL 多筆Insert新增資料

SQL 多筆Insert新增資料
使用簡易方法=>傳入DataTable後自動組合成SQL指令後寫入DataBase

//1.取得空的DataTable
  1. DataTable dt = GetEmptyTable("Table1");
//2.資料放入DataTable
  1. DataRow dr = dt.NewRow();
  2. dr["id"] = "1";
  3. dr["no"] = "A001";
  4. dt.Rows.Add(dr);
  5.  
//3.DataTable存入資料庫
  1. MultiInsert(dt, "Table1");
  2.  

//Function
  1.         /// <summary>
  2.         /// 多筆新增資料
  3.         /// </summary>
  4.         /// <param name="dt"></param>
  5.         /// <param name="tableName"></param>
  6.         /// <returns></returns>
  7.         public static int MultiInsert(DataTable dt, string tableName)
  8.         {
  9.             try
  10.             {
  11.                 int count = dt.Rows.Count;
  12.                 string ConnectionString = ConfigurationManager.ConnectionStrings[BPM.BPM_ConnStr].ToString();
  13.                 using (SqlConnection conn = new SqlConnection(ConnectionString))
  14.                 {
  15.                     conn.Open();
  16.                     //組合SQL  Insert String
  17.                     string mysql = InsertString_Collect(tableName, dt);
  18.                     SqlTransaction mytrans = conn.BeginTransaction();
  19.                     //逐筆檢驗 逐筆新增
  20.                     foreach (DataRow dr in dt.Rows)
  21.                     {
  22.                         //檢驗比對資料內容是否正確
  23.                         //如c2 ==aa then c4=false...等
  24.                         if (1 == 1)
  25.                         {
  26.                             using (SqlCommand cmd = new SqlCommand(mysql, conn))
  27.                             {
  28.                                 cmd.Transaction = mytrans;
  29.                                 foreach (DataColumn col in dt.Columns)
  30.                                 {
  31.                                     cmd.Parameters.AddWithValue("@" + col.ColumnName, dr[col.ColumnName]);
  32.                                 }
  33.                                 cmd.ExecuteNonQuery();
  34.                             }
  35.                         }
  36.                     }
  37.                     mytrans.Commit();
  38.                     return count;
  39.                 }
  40.             }
  41.             catch (Exception)
  42.             {
  43.                 throw;
  44.             }
  45.         }
  46.  
  47.         /// <summary>
  48.         /// 組出SQL Insert String
  49.         /// </summary>
  50.         /// <param name="tableName"></param>
  51.         /// <param name="dt"></param>
  52.         /// <returns></returns>
  53.         public static string InsertString_Collect(string tableName, DataTable dt)
  54.         {
  55.             try
  56.             {
  57.                 string sql = "INSERT INTO " + tableName + "({p}) VALUES ({v})";
  58.                 string p = string.Empty;
  59.                 string v = string.Empty;
  60.                 foreach (DataColumn col in dt.Columns)
  61.                 {
  62.                     p += col.ColumnName.ToString() + ",";
  63.                     v += "@" + col.ColumnName.ToString() + ",";
  64.                 }
  65.                 p = p.Substring(0, int.Parse(p.Length.ToString()) - 1);
  66.                 v = v.Substring(0, int.Parse(v.Length.ToString()) - 1);
  67.                 sql = sql.Replace("{p}", p);
  68.                 sql = sql.Replace("{v}", v);
  69.                 return sql;
  70.             }
  71.             catch (Exception)
  72.             {
  73.                 throw;
  74.             }
  75.         }
  76.   /// <summary>
  77.         /// 取得空的Table
  78.         /// </summary>
  79.         /// <param name="tableName">Database Table Name</param>
  80.         /// <returns>DataTable</returns>
  81.         public static DataTable GetEmptyTable(string tableName)
  82.         {
  83.             DataTable dt = new DataTable();
  84.             try
  85.             {
  86.                 SqlConnection cn = new SqlConnection();
  87.                 SqlCommand cmd = new SqlCommand();
  88.                 SqlDataAdapter da = new SqlDataAdapter();
  89.                 DataSet ds;
  90.                 string sql = string.Empty;
  91.                 string sqlwhere = string.Empty;
  92.                 string sqlsort = string.Empty;
  93.                 #region Execute SQL
  94.                 cn.ConnectionString = ConfigurationManager.ConnectionStrings[BPM.BPM_ConnStr].ToString();
  95.                 cmd.Connection = cn;
  96.                 cmd.CommandText = "SELECT * FROM " + tableName + " WHERE 1=0";
  97.                 cn.Open();
  98.                 da.SelectCommand = cmd;
  99.                 sql = da.SelectCommand.CommandText;
  100.                 ds = new DataSet();
  101.                 da.Fill(ds, "dt");
  102.                 dt = ds.Tables["dt"];
  103.                 cn.Close();
  104.                 #endregion Execute SQL
  105.             }
  106.             catch (Exception)
  107.             {
  108.                 //throw;
  109.             }
  110.             return dt;
  111.         }
  112.  

沒有留言:

張貼留言