Aquestes funcions s'encarreguen de muntar un SQL amb un UPDATE per actualitzar un registre de la taula. Si no hi ha stored procedures es pot recórrer a això. Com sempre en dos sabors, un amb DataRow i un amb Dictionary . Quan es munta el WHERE el les taules que tenen identitat normalment serà fàcil, si no cal suportar que hi hagi una clau primària (PK) composta, per això cal fer un bucle per posar tots els camps i valors de la PK. Disponible a la clsDades
public string UPD_Builder(Dictionary<string, string> DR)
{
StringBuilder SB = new StringBuilder();
DateTime ValorDateTime;
bool Primer = true;
SB.AppendFormat("UPDATE {0} SET ", NomTaula);
for (int i = 0; i < CampsResultat.Length; i++)
{
if (!CampsResultat[i].PK)
{
if (!DR.ContainsKey(CampsResultat[i].NomCamp))
{
throw new Exception("La fila no té el camp " + CampsResultat[i].NomCamp);
}
if (string.IsNullOrWhiteSpace(DR[CampsResultat[i].NomCamp]))
{
if (!CampsResultat[i].Nulable)
throw new Exception("Camp " + CampsResultat[i].NomCamp + " no admet valors NULLs");
else
{
SB.AppendFormat("{0}=NULL, ", CampsResultat[i].NomCamp);
}
}
else
{
switch (CampsResultat[i].Tipus)
{
case Tipus.nchar:
case Tipus.nvarchar:
case Tipus.chr:
case Tipus.varchar:
SB.AppendFormat("{0}='{1}', ",
CampsResultat[i].NomCamp, DR[CampsResultat[i].NomCamp].Replace("'", "''"));
break;
case Tipus.datetime:
case Tipus.date:
case Tipus.time:
ValorDateTime = DateTime.Parse(DR[CampsResultat[i].NomCamp]);
SB.AppendFormat("{0}='{1}', ",
CampsResultat[i].NomCamp, FDateSQL(ValorDateTime));
break;
case Tipus.dec:
SB.AppendFormat("{0}={1}, ",
CampsResultat[i].NomCamp, DR[CampsResultat[i].NomCamp].Replace(",", "."));
break;
case Tipus.bit:
if (DR[CampsResultat[i].NomCamp].ToLower() == "true")
SB.AppendFormat("{0}=1, ", CampsResultat[i].NomCamp);
else SB.AppendFormat("{0}=0, ", CampsResultat[i].NomCamp);
break;
default:
SB.AppendFormat("{0}={1}, ", CampsResultat[i].NomCamp, DR[CampsResultat[i].NomCamp]);
break;
}
}
}
}
SB.Remove(SB.Length - 2, 2);
SB.Append(" WHERE ");
if (TeIdentitat)
{
SB.AppendFormat("{0}={1}", Identitat, DR[Identitat]);
}
else
{
foreach (clsCamp Camp in CampsResultat)
{
if (Camp.PK)
{
if (!Primer) SB.Append(" AND ");
else Primer = false;
switch (Camp.Tipus)
{
case Tipus.nchar:
case Tipus.nvarchar:
case Tipus.chr:
case Tipus.varchar:
SB.AppendFormat("{0}='{1}'", Camp.NomCamp, DR[Camp.NomCamp].Replace("'", "''"));
break;
case Tipus.datetime:
case Tipus.date:
case Tipus.time:
ValorDateTime = DateTime.Parse(DR[Camp.NomCamp]);
SB.AppendFormat("{0}='{1}'", Camp.NomCamp, FDateSQL(ValorDateTime));
break;
case Tipus.dec:
SB.AppendFormat("{0}={1}", Camp.NomCamp, DR[Camp.NomCamp].Replace(",", "."));
break;
case Tipus.bit:
if (DR[Camp.NomCamp].ToString().ToLower() == "true")
SB.AppendFormat("{0}=1, ", Camp.NomCamp);
else SB.AppendFormat("{0}=0", Camp.NomCamp);
break;
default:
SB.AppendFormat("{0}={1}", Camp.NomCamp, DR[Camp.NomCamp]);
break;
}
}
}
}
return SB.ToString();
}
public string UPD_Builder(DataRow DR)
{
StringBuilder SB = new StringBuilder();
DateTime ValorDateTime;
bool Primer = true;
SB.AppendFormat("UPDATE {0} SET ", NomTaula);
for (int i = 0; i < CampsResultat.Length; i++)
{
if (!CampsResultat[i].PK)
{
if (!DR.Table.Columns.Contains(CampsResultat[i].NomCamp))
{
throw new Exception("La fila no té el camp " + CampsResultat[i].NomCamp);
}
if (DR.IsNull(CampsResultat[i].NomCamp))
{
if (!CampsResultat[i].Nulable)
throw new Exception("Camp " + CampsResultat[i].NomCamp + " no admet valors NULLs");
else
{
SB.AppendFormat("{0}=NULL, ", CampsResultat[i].NomCamp);
}
}
else
{
switch (CampsResultat[i].Tipus)
{
case Tipus.nchar:
case Tipus.nvarchar:
case Tipus.chr:
case Tipus.varchar:
SB.AppendFormat("{0}='{1}', ", CampsResultat[i].NomCamp,
DR[CampsResultat[i].NomCamp].ToString().Replace("'", "''"));
break;
case Tipus.datetime:
case Tipus.date:
case Tipus.time:
ValorDateTime = DR.Field<DateTime>(CampsResultat[i].NomCamp);
SB.AppendFormat("{0}='{1}', ", CampsResultat[i].NomCamp, FDateSQL(ValorDateTime));
break;
case Tipus.dec:
SB.AppendFormat("{0}={1}, ", CampsResultat[i].NomCamp,
DR[CampsResultat[i].NomCamp].ToString().Replace(",", "."));
break;
case Tipus.bit:
if (DR[CampsResultat[i].NomCamp].ToString().ToLower() == "true")
SB.AppendFormat("{0}=1, ", CampsResultat[i].NomCamp);
else SB.AppendFormat("{0}=0, ", CampsResultat[i].NomCamp);
break;
default:
SB.AppendFormat("{0}={1}, ", CampsResultat[i].NomCamp, DR[CampsResultat[i].NomCamp]);
break;
}
}
}
}
SB.Remove(SB.Length - 2, 2);
SB.Append(" WHERE ");
if (TeIdentitat)
{
SB.AppendFormat("{0}={1}", Identitat, DR[Identitat]);
}
else
{
foreach (clsCamp Camp in CampsResultat)
{
if (Camp.PK)
{
if (!Primer) SB.Append(" AND ");
else Primer = false;
switch (Camp.Tipus)
{
case Tipus.nchar:
case Tipus.nvarchar:
case Tipus.chr:
case Tipus.varchar:
SB.AppendFormat("{0}='{1}'", Camp.NomCamp, DR[Camp.NomCamp].ToString().Replace("'", "''"));
break;
case Tipus.datetime:
case Tipus.date:
case Tipus.time:
ValorDateTime = DR.Field<DateTime>(Camp.NomCamp);
SB.AppendFormat("{0}='{1}'", Camp.NomCamp, FDateSQL(ValorDateTime));
break;
case Tipus.dec:
SB.AppendFormat("{0}={1}", Camp.NomCamp, DR[Camp.NomCamp].ToString().Replace(",", "."));
break;
case Tipus.bit:
if (DR[Camp.NomCamp].ToString().ToLower() == "true") SB.AppendFormat("{0}=1, ", Camp.NomCamp);
else SB.AppendFormat("{0}=0", Camp.NomCamp);
break;
default:
SB.AppendFormat("{0}={1}", Camp.NomCamp, DR[Camp.NomCamp]);
break;
}
}
}
}
return SB.ToString();
}
|