DataGridView數據更新至數據庫-逐條更新
首先判斷是否存在指定記錄,存在則執行更新語句,不存在則執行插入語句。主要用到三個函數:
public class PubVariant { public static string strUpdateSql = "update CorrespondFields set CadField = @CadField,FieldType = @FieldType,CADTYPE = @CADTYPE" + " where SdeLayerName = @SdeLayerName and CadLayerName = @CadLayerName and SdeField = @SdeField"; public static string strInsertSql = "insert into CorrespondFields values(@SdeLayerName,@CadLayerName,@SdeField,@CadField,@FieldType,@CADTYPE)"; }
/// <summary> /// 判斷數據庫是否有指定鍵值的記錄 /// </summary> /// <param name="str">鍵值</param> /// <returns>是否存在記錄的布爾值</returns> public static bool ExistsRecord(string str) { string strSql = "select * from CorrespondFields where SdeField = '" + str + "' and SdeLayerName = '" + PubVariant.sdeLayerName + "' and CadLayerName = '" + PubVariant.cadLayerName + "'"; using (SqlConnection connection = new SqlConnection(PubVariant.ConnectionString)) { connection.Open(); SqlCommand cmd = new SqlCommand(); cmd.Connection = connection; cmd.CommandText = strSql; cmd.CommandType = CommandType.Text; SqlDataReader datareader = cmd.ExecuteReader(); return datareader.HasRows; } } /// <summary> /// 執行帶參數的Sql語句 /// </summary> /// <param name="sqlParas">sql參數數組</param> /// <param name="strSql">要執行的sql語句</param> public static void ExecuteSql(SqlParameter[] sqlParas, string strSql) { using (SqlConnection connection = new SqlConnection(PubVariant.ConnectionString)) { connection.Open(); using (SqlCommand cmd = new SqlCommand(strSql, connection)) { foreach (SqlParameter sp in sqlParas) { cmd.Parameters.Add(sp); } cmd.ExecuteNonQuery(); } } } /// <summary> /// 用datagridview的數據更新數據庫 /// </summary> /// <param name="dgv">datagridview</param> /// <returns>更新是否成功</returns> public static bool UpdataFromDGVtoDB(DataGridView dgv) { try { for (int i = 0; i < dgv.Rows.Count - 1; i++) { string strCADTYPE; if (dgv.Rows[i].Cells[1].Value.ToString().StartsWith("[")) { strCADTYPE = "1"; } else { strCADTYPE = "2"; } SqlParameter[] sqlParas = new SqlParameter[] { new SqlParameter("@SdeLayerName", PubVariant.sdeLayerName), new SqlParameter("@CadLayerName", PubVariant.cadLayerName), new SqlParameter("@SdeField", dgv.Rows[i].Cells[0].Value.ToString()), new SqlParameter("@CadField", dgv.Rows[i].Cells[1].Value.ToString()), new SqlParameter("@FieldType", dgv.Rows[i].Cells[2].Value.ToString()), new SqlParameter("@CADTYPE", strCADTYPE) }; if (ExistsRecord(dgv.Rows[i].Cells[0].Value.ToString())) { ExecuteSql(sqlParas, PubVariant.strUpdateSql); } else { ExecuteSql(sqlParas, PubVariant.strInsertSql); } } return true; } catch (Exception ex) { MessageBox.Show(ex.Message, "係統提示"); return false; } }
最後更新:2017-04-03 05:38:54