C# update join,delete join
public static int UpdateJoin(DbFactory factory, string relationKey, string foreignKey, Dictionary<string, object> data, string condition, Joins mode, out string sql)
{
int count = data.Count;
if (count == 0)
{
throw new ArgumentException("data");
}
string table = relationKey.Substring(0, relationKey.IndexOf(SqlBuilder.JoinSymbol)), foreignTable = foreignKey.Substring(0, foreignKey.IndexOf(SqlBuilder.JoinSymbol));
count *= 8 + Math.Max(table.Length, foreignTable.Length);
StringBuilder sb = new StringBuilder(count);
using (Dictionary<string, object>.Enumerator e = data.GetEnumerator())
{
e.MoveNext();
sb.Append(e.Current.Key).Append("=").AppendValue(e.Current.Value);
while (e.MoveNext())
{
sb.Append(SqlBuilder.Separator).Append(e.Current.Key).Append("=").AppendValue(e.Current.Value);
}
}
switch (factory.ProviderName)
{
case DbProvider.Sql:
sql = String.Concat("UPDATE [", table, "] SET ", sb.ToString(), " FROM [", table, "] ", mode.ToString(), " JOIN [", foreignTable, "] ON ", relationKey, "=", foreignKey, SqlBuilder.Space, condition);
break;
case DbProvider.OleDb:
sql = String.Concat("UPDATE [", table, "] ", mode.ToString(), " JOIN [", foreignTable, "] ON ", relationKey, "=", foreignKey, " SET ", sb.ToString(), SqlBuilder.Space, condition);
break;
default:
throw new NotSupportedException();
}
return DbBase.ExecuteNonQuery(factory, sql);
}
public static int DeleteJoin(DbFactory factory, string relationKey, string foreignKey, string condition, Joins mode, out string sql)
{
string table = relationKey.Substring(0, relationKey.IndexOf(SqlBuilder.JoinSymbol)), foreignTable = foreignKey.Substring(0, foreignKey.IndexOf(SqlBuilder.JoinSymbol));
switch (factory.ProviderName)
{
case DbProvider.Sql:
sql = String.Concat("DELETE FROM [", table, "] FROM [", table, "] ", mode.ToString(), " JOIN [", foreignTable, "] ON ", relationKey, "=", foreignKey, SqlBuilder.Space, condition);
break;
case DbProvider.OleDb:
sql = String.Concat("DELETE ", table, ".*,", foreignTable, ".* FROM [", table, "] ", mode.ToString(), " JOIN [", foreignTable, "] ON ", relationKey, "=", foreignKey, SqlBuilder.Space, condition);
break;
default:
throw new NotSupportedException();
}
return DbBase.ExecuteNonQuery(factory, sql);
}