1
我正在做一个C#应用程序,即时通讯相当确定我的代码是正确的,但即时通讯与SQL连接新。我的问题是,我有2个对象,其中A包含B并且正在执行查询以获取所有A行将它们添加到列表中,并且对于每一行我去搜索它的B并将它们添加到A.bList。在B查询中,结果是A>。>这是怎么回事?DataTable返回旧结果
如果有帮助。这两个班是业主和狗 所以班主(Dono)有一个狗(曹)对象的列表。
public class dal
{
#region Membros
private SqlConnection cs = new SqlConnection("Data Source=.;Initial Catalog=canil;Integrated Security=True");
private SqlDataAdapter da = new SqlDataAdapter();
private SqlCommand cmd = new SqlCommand();
private DataTable dt = new DataTable();
#endregion
#region MembrosGetSetPrivados
private bool setCommand(string stringSQL)
{
try
{
cs.Open(); // Abre a Ligação
// 1. Instancia o novo comando com a query e a connecção
cmd = new SqlCommand(stringSQL, cs);
// 2. Executa o comando
try
{
cmd.ExecuteNonQuery();
}
catch (Exception ex)
{
return false;
}
}
finally
{
//Fecha a ligação
if (cs != null)
cs.Close();
}
return true;
}
private DataTable getCommand(string stringSQL)
{
da.SelectCommand = new SqlCommand(stringSQL, cs);
da.Fill(dt);
return dt;
}
#endregion
#region MembrosGetSetPublicos
public void getDonos(List<Dono> lista)
{
DataTable resultados = getCommand("SELECT * FROM dono;");
foreach(DataRow dr in resultados.Rows)
{
int idDono, contacto;
string nome,morada;
idDono = Convert.ToInt32(dr[0]);
contacto = Convert.ToInt32(dr[1]);
nome = dr[2].ToString();
morada = dr[3].ToString();
Dono dono = new Dono(idDono, contacto, nome, morada);
getCaesDono(dono);
lista.Add(dono);
}
}
public void getCaesDono(Dono dono)
{
DataTable r = getCommand("SELECT cao.idCao,cao.idRaca,cao.chip,cao.peso,cao.nome,raca.descricao FROM cao,dono,raca WHERE cao.idCao = dono.idCao AND cao.idRaca = raca.idRaca AND dono.idDono = 1");
foreach(DataRow linha in r.Rows)
{
int idCao = Convert.ToInt32(linha[0]);
int idRaca = Convert.ToInt32(linha[1]);
int chip = Convert.ToInt32(linha[2]);
double peso = Convert.ToDouble(linha[3]);
Raca raca = new Raca(idRaca,linha[5].ToString());
string nome = linha[4].ToString();
dono.caes.Add(new Cao(idCao, idRaca, chip, peso, raca, nome));
}
}
嗯,这可以解决我的问题,但我对此不以为然。
Dono dono = new Dono(idDono, contacto, nome, morada);
dal d = new dal();
d.getCaesDono(dono);
所以很明显,问题是SqlDataAdapter接缝,以保持最后的结果。我似乎无法找到任何方法来清除它或什么。我应该使用另一个SqlDataAdapter吗?我也认为这不是答案。任何人都可以指路吗?
尝试检查是否已启用缓存某处 –
呵呵,是啊,但还是不帮我以任何方式,形状或形式,所以...是啊。 – Vcoder
我搜索了C#+ SQL +缓存+禁用,但没有线索。你能指点我吗? – Vcoder