public void UpdateState(string key, object state, ISessionTransaction transaction) { DbTransaction t = (DbTransaction)transaction; using (IDbCommand cmd = t.Connection.CreateCommand()) { cmd.CommandText = (state == null ? SQL_DELETE : SQL_UPDATE); IDataParameter p_id = cmd.CreateParameter(), p_key = cmd.CreateParameter(); p_id.ParameterName = "id"; p_key.ParameterName = "key"; p_id.Value = _id; p_key.Value = key; cmd.Parameters.Add(p_id); cmd.Parameters.Add(p_key); if (state != null) { IDataParameter p_data = cmd.CreateParameter(); p_data.ParameterName = "data"; using (MemoryStream ms = new MemoryStream()) { BinaryFormatter formatter = new BinaryFormatter(); formatter.Serialize(ms, state); ms.Close(); p_data.Value = ms.ToArray(); } cmd.Parameters.Add(p_data); } cmd.ExecuteNonQuery(); } }
public object ReadState(string key, ISessionTransaction transaction) { DbTransaction t = (DbTransaction)transaction; using (IDbCommand cmd = t.Connection.CreateCommand()) { cmd.CommandText = SQL_SELECT; IDataParameter p_id = cmd.CreateParameter(), p_key = cmd.CreateParameter(); p_id.ParameterName = "id"; p_key.ParameterName = "key"; p_id.Value = _id; p_key.Value = key; cmd.Parameters.Add(p_id); cmd.Parameters.Add(p_key); using (IDataReader reader = cmd.ExecuteReader()) { if (reader.Read()) { try { BinaryFormatter formatter = new BinaryFormatter(); using (MemoryStream ms = new MemoryStream((byte[])reader.GetValue(0))) { return(formatter.Deserialize(ms)); } } catch {} } } } return(null); }
public void UpdateState(string key, object state) { using (ISessionTransaction transaction = DbTransaction.Create(this, _create, IsolationLevel.Serializable)) { UpdateState(key, state, transaction); } }