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
}

浙公网安备 33010602011771号