我有一些代码使用访问文件来存储数据: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上,我没有得到异常,程序的工作就像数据存在一样,
comand.CommandText = "SELECT * FROM Usuarios WHERE usuario='" + usuario + "'" ; OleDbDataReader reader = comand.ExecuteReader(); if (reader.HasRows) {
reader.HasRows返回true
就像数据是否存在直到我关闭程序一样,在我看来,它正在创建一个临时文件或其他东西,并且在关闭时它不会保存更改。 如何永久更改?
答案 0 :(得分:0)
根据我在您发布的代码中看到的内容,更改应该是永久性的。有一点我想指出的是,创建INSERT语句的代码容易受到SQL注入攻击。你可以研究它是什么,并找出它是否适用于你(基本上它取决于Access是否支持像DROP TABLE等SQL命令。
我会检查一些事情。
在解决方案中查找MDB文件并检查其属性。其中一个属性是“复制到输出目录”,这需要设置为Copy If Newer而不是Copy Always。将值设置为“始终复制”时,每次运行程序时,MDB文件的空副本都会覆盖DEBUG / RELEASE文件夹中包含数据的MDB。如果更改MDB的结构,则复制如果更新将仅替换数据文件,从而使其日期比调试文件夹中的日期更新。
如果以上不是问题,那么您可能有一个损坏的MDB,您需要在Access中打开它并对其进行修复。