Datatable转为Sql语句,这里是转为Mysql,如果需要转为其他Sql,小小的修改即可
public static string DataTableToSQL(DataTable dataTable, DataTableToSQLType tpye, string SQLWhere = null) { if (dataTable.TableName == "" || dataTable.TableName == null) { return ""; } StringBuilder sb = new StringBuilder(); int i = 0; int j = 0; if (tpye == DataTableToSQLType.INSERT) { for (i = 0; i < dataTable.Rows.Count; i++) { sb.AppendFormat("INSERT INTO {0}(", dataTable.TableName); //拼前半段INSERT for (j = 0; j < dataTable.Columns.Count; j++) { if (j == dataTable.Columns.Count - 1) { sb.AppendFormat("{0})", dataTable.Columns[j].Caption); } else { sb.AppendFormat("{0},", dataTable.Columns[j].Caption); } } //拼后半段VALUES sb.Append(" VALUES("); for (j = 0; j < dataTable.Columns.Count; j++) { var value = GetValue(dataTable.Columns[j].DataType, dataTable.Rows[i][j]); if (j == dataTable.Columns.Count - 1) { if (string.IsNullOrEmpty(value + "")) sb.AppendFormat("{0});", "NULL"); else sb.AppendFormat("{0});", value); } else { if (string.IsNullOrEmpty(value + "")) sb.AppendFormat("{0},", "NULL"); else sb.AppendFormat("'{0}',", value); } } sb.AppendLine(); } } else if (tpye == DataTableToSQLType.UPDATE) { for (i = 0; i < dataTable.Rows.Count; i++) { //判断行是否被修改,修改才生成sql //if (dataTable.Rows[i].RowState == DataRowState.Modified) //{ sb.AppendFormat("UPDATE {0} SET ", dataTable.TableName); for (j = 0; j < dataTable.Columns.Count; j++) { var value = GetValue(dataTable.Columns[j].DataType, dataTable.Rows[i][j]); if (dataTable.Columns[j].ColumnName == "update_time" && dataTable.Rows[i][j] != null) { value = Convert.ToDateTime(dataTable.Rows[i][j]).ToString("yyyy-MM-dd HH:mm:ss"); } if (j == dataTable.Columns.Count - 1) { if (string.IsNullOrEmpty(value + "")) sb.AppendFormat(" {0}={1}", dataTable.Columns[j].Caption, "NULL"); else sb.AppendFormat(" {0}='{1}'", dataTable.Columns[j].Caption, value + ""); } else { if (string.IsNullOrEmpty(value + "")) sb.AppendFormat(" {0}={1},", dataTable.Columns[j].Caption, "NULL"); else sb.AppendFormat(" {0}='{1}',", dataTable.Columns[j].Caption, value + ""); } } if (!string.IsNullOrEmpty(SQLWhere)) sb.AppendFormat(" WHERE ", SQLWhere); else sb.AppendFormat(" WHERE id='{0}';", dataTable.Rows[i]["id"]); sb.AppendLine(); } //} } else if (tpye == DataTableToSQLType.DELETE) { //判断用户是否录入自定义条件 if (!string.IsNullOrEmpty(SQLWhere)) sb.AppendFormat("DELETE {0} WHERE {1} ", dataTable.TableName, SQLWhere); else { sb.AppendFormat("DELETE {0} WHERE {1} IN (", dataTable.TableName, dataTable.Columns[0].Caption); for (i = 0; i < dataTable.Rows.Count; i++) { if (i < dataTable.Rows.Count - 1) { sb.AppendFormat("'{0}',", dataTable.Rows[i][0]); } else { sb.AppendFormat("'{0}');", dataTable.Rows[i][0]); } } } } return sb.ToString(); }
判断时间类型
private static object GetValue(Type type, object value) { if (type == typeof(DateTime)) { if (value != null&&value!=System.DBNull.Value) { return Convert.ToDateTime(value).ToString("yyyy-MM-dd HH:mm:ss"); } } return value; }
Sql操作模式
public enum DataTableToSQLType { INSERT, UPDATE, DELETE }