Seguint amb la sèrie de la clsDades aquesta és la funció que s'encarrega d'insertar un registre a la BBDD. Fa servir la SP INS per fer-ho. Així que ha de fer servir la variable ParamsINS per informar-ne els paràmetres. Existeix en 2 sabors diferents, un que rep un DataRow i un altra que rep un objecte Dictionary (on les Keys són els noms dels camps i els Values el valor). Ambdues quan hi ha una identitat en la taula on inserten recuperen el valor que s'ha generat. Ja posats que hi ha informació sobre si un camp admet nulls o no, es fa aquesta verificació. El que no es mira és el tipus de dades del valor que passa per actualitzar. Resaltar que aquesta funció invalida la cache de dades, aleshores si la clase fa servir la cache i està activada la auto-neteja aleshores buida la cache. Pot ser que no interessi netejar la cache cada cop, per exemple si hi ha molts inserts seguits, aleshores cal posar el "Autonetejar" a fals.
El codi de la versió DataRow:
public void INS(DataRow DR)
{
SqlCommand SqlComm = new SqlCommand();
SqlParameter SqlParam;
Int64 ID = 0;
bool LocalConn;
SqlConnection Conn = null;
if (SQLConn == null)
{
LocalConn = true;
Conn = new SqlConnection(CadConnBBDD);
Conn.Open();
}
else
{
LocalConn = false;
Conn = SQLConn;
}
SqlComm.Connection = Conn;
if (SQLTrans != null) SqlComm.Transaction = SQLTrans;
SqlComm.CommandType = CommandType.StoredProcedure;
SqlComm.CommandText = spINS;
foreach (clsCamp Camp in ParamsINS)
{
SqlParam = CreaParametre(Camp, true);
if (DR.Table.Columns.Contains(Camp.NomCamp))
{
if (!DR.IsNull(Camp.NomCamp))
{
if (Camp.Nulable) SqlParam.Value = DBNull.Value;
else
{
if (!Camp.Identitat)
{
Exception Ex = new Exception("El camp " + Camp.NomCamp + " no admet valors nulls");
throw Ex;
}
}
}
else SqlParam.Value = DR[Camp.NomCamp];
}
else
{
if (Camp.Nulable) SqlParam.Value = DBNull.Value;
else
{
if (!Camp.Identitat)
{
Exception Ex = new Exception("El camp " + Camp.NomCamp + " no admet valors nulls");
throw Ex;
}
}
}
SqlComm.Parameters.Add(SqlParam);
}
SqlComm.ExecuteNonQuery();
if (TeCache && AutoNetejaCache)
{
ClearCache();
}
if (LocalConn)
{
Conn.Close();
Conn.Dispose();
Conn = null;
}
if (TeIdentitat)
{
ID = Int64.Parse(SqlComm.Parameters[Prefix + Identitat].Value.ToString());
DR[Identitat] = ID;
}
DR.AcceptChanges();
}
La versió que fa servir el Dictionary retorna el ID generat en cas que hagi identitat.
public Int64 INS(Dictionary<string, string> Params)
{
SqlCommand SqlComm = new SqlCommand();
SqlParameter SqlParam;
Int64 ID = 0;
bool LocalConn;
SqlConnection Conn = null;
if (SQLConn == null)
{
LocalConn = true;
Conn = new SqlConnection(CadConnBBDD);
Conn.Open();
}
else
{
LocalConn = false;
Conn = SQLConn;
}
SqlComm.Connection = Conn;
if (SQLTrans != null) SqlComm.Transaction = SQLTrans;
SqlComm.CommandType = CommandType.StoredProcedure;
SqlComm.CommandText = spINS;
foreach (clsCamp Camp in ParamsINS)
{
SqlParam = CreaParametre(Camp, true);
if (Params.Keys.Contains<string>(Camp.NomCamp))
{
if (string.IsNullOrEmpty(Params[Camp.NomCamp]))
{
if (Camp.Nulable) SqlParam.Value = DBNull.Value;
else
{
Exception Ex = new Exception("El camp " + Camp.NomCamp + " no admet valors nulls");
throw Ex;
}
}
else SqlParam.Value = Params[Camp.NomCamp];
}
else
{
if (Camp.Nulable) SqlParam.Value = DBNull.Value;
else
{
if (!Camp.Identitat)
{
Exception Ex = new Exception("El camp " + Camp.NomCamp + " no admet valors nulls");
throw Ex;
}
}
}
SqlComm.Parameters.Add(SqlParam);
}
SqlComm.ExecuteNonQuery();
if (TeCache && AutoNetejaCache)
{
ClearCache();
}
if (LocalConn)
{
Conn.Close();
Conn.Dispose();
Conn = null;
}
if (TeIdentitat) ID = Int64.Parse(SqlComm.Parameters[Prefix + Identitat].Value.ToString());
else ID = 0;
return ID;
}
|