我有一個使用訪問文件來存儲數據的一些代碼:P不能節省訪問數據庫的變化
我寫了一篇關於無代碼的訪問文件中的一些數據,以便我能讀它,並閱讀工作方法細,像這樣的:
class dbConection
{
private static OleDbConnection conection = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\teacher assistant.mdb");
private static OleDbCommand comand = new OleDbCommand();
private static OleDbDataAdapter adapter = new OleDbDataAdapter();
public static bool canConnect()
{
try
{
conection.Open();
if (conection.State == ConnectionState.Open)
{
Console.WriteLine("conexion exitosa");
conection.Close();
return true;
}
else
{
Console.WriteLine("conexion fallida");
return false;
}
}
catch (Exception ex)
{
Console.WriteLine("conexion fallida, error: "+ex.Message);
return false;
}
//more methods...
}
而這一次
internal static Grupo[] GruposAsociadosCon(int idUsuario)
{
conection.Open();
comand.Connection = conection;
comand.CommandText = "SELECT * FROM Salones WHERE maestro=" + idUsuario.ToString();
OleDbDataReader reader = null;
reader = comand.ExecuteReader();
List<Grupo> lGrupos = new List<Grupo>();
while (reader.Read())
{
int id = Convert.ToInt16(reader["idSalon"].ToString());
int grado = Convert.ToInt16(reader["grado"].ToString());
char grupo = reader["grupo"].ToString().First();
string escuela = reader["escuela"].ToString();
Grupo g = new Grupo(id, grado, grupo, escuela);
lGrupos.Add(g);
}
reader.Close();
conection.Close();
return lGrupos.ToArray();
}
的問題是這寫數據的方法,像這樣的:
internal static bool RegistrarUsuario(string usuario, string contra)
{
conection.Open();
comand.Connection = conection;
comand.CommandText = "SELECT * FROM Usuarios WHERE usuario='" + usuario + "'" ;
OleDbDataReader reader = comand.ExecuteReader();
if (reader.HasRows)
{
//MessageBox.Show("EL usuario ya existe");
conection.Close();
throw new Exception("Ya existe este usuario");
}
reader.Close();
comand = new OleDbCommand();
comand.CommandText = "INSERT INTO Usuarios (usuario, contrasena) VALUES('"+usuario+"', '"+contra+"')";
comand.Connection = conection;
Console.WriteLine(comand.ExecuteNonQuery()+" lienas con cambios");
conection.Close();
return true;
}
當我保存它不會對accessFile apear,我沒有得到一個異常文件的數據
,程序工作就好像數據在那裏,
comand.CommandText = "SELECT * FROM Usuarios WHERE usuario='" + usuario + "'" ; OleDbDataReader reader = comand.ExecuteReader(); if (reader.HasRows) {
reader.HasRows retuns真正
它的工作原理一樣,如果數據在那裏,直到我關閉程序,在我看來,它是建立一箇中的臨時文件或S並且它在關閉時不保存更改。 我怎樣才能使這些變化永久?
已經嘗試過這些:/ 謝謝任何方式:) –
我在我的研究過程中發現的另一個問題是您的連接字符串。逐行調試您的代碼並查看.NET正在轉換的數據| DataDirectory |成。我理解它應該是運行代碼的目錄(與EXE相同)。即使您已經在DEBUG期間啓用了ClickOnce部署,它仍然應該解析爲數據文件夾。如果沒有提供任何照明,我會有興趣查看整個源代碼包以查看是否可以追蹤錯誤,但是,可能存在隱私和代碼所有權問題,可能會阻止此類幫助。 – Wizengamot
我這裏的連接字符串的原因是因爲你的代碼顯然是保存數據,這很清楚..所以要回答的問題是......數據在哪裏?如果你無法解析給出的位置(即.NET不告訴你),那麼我建議使用不受控制的MDB文件的全限定路徑。NET(調試文件夾外)...例如c:\ temp \ teacher assistant.mdb。我要做的最後一件事就是在文件名中創建一個沒有空格的MDB。我知道你應該能夠使用空格等,但只是爲了shiggles和gits .... :-) – Wizengamot