想写一个最基本的注册用户模块,两个文本框分别输入name和psw,然后向已建立好的Access数据库文件中插入新数据.
主要代码如下:
private void button1_Click(object sender, EventArgs e)
{
string ConString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=db1.mdb";
OleDbConnection connection = new OleDbConnection(ConString);
connection.Open();
string strsql = "insert into Users(name,psw) Values('" + textBox1.Text + "','" + this.textBox2.Text + "')"; OleDbCommand cmd = new OleDbCommand(strsql, connection);
try
{
cmd.ExecuteNonQuery();
MessageBox.Show("rigister successfully!");
}
catch (System.Exception ex)
{
MessageBox.Show(ex.ToString());
}
finally
{
cmd.Connection.Close();
}
}运行后显示注册成功,但为何打开数据库文件后发现注册的name和pwd并没有真正写入数据库文件中?如何才能把注册信息真正写入并保存在数据库中呢?初学者,请高手们指点一下,谢谢
主要代码如下:
private void button1_Click(object sender, EventArgs e)
{
string ConString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=db1.mdb";
OleDbConnection connection = new OleDbConnection(ConString);
connection.Open();
string strsql = "insert into Users(name,psw) Values('" + textBox1.Text + "','" + this.textBox2.Text + "')"; OleDbCommand cmd = new OleDbCommand(strsql, connection);
try
{
cmd.ExecuteNonQuery();
MessageBox.Show("rigister successfully!");
}
catch (System.Exception ex)
{
MessageBox.Show(ex.ToString());
}
finally
{
cmd.Connection.Close();
}
}运行后显示注册成功,但为何打开数据库文件后发现注册的name和pwd并没有真正写入数据库文件中?如何才能把注册信息真正写入并保存在数据库中呢?初学者,请高手们指点一下,谢谢
但改过后并没有解决我所说的问题啊,就是运行完程序后找开数据库文件db1.mdb展开表,发现刚才输入的数据并不在表里,如何才能够加进表里呢?
看看返回值是?还有
string ConString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=db1.mdb
Data Source=db1.mdb用绝对路径!!
你看的那个数据库文件是不是就是这个!!!
譬如说你现在在release模式下,但看的是Debug文件夹下的数据库?
项目名称为Rigister,程序运行后在VS开发界面的解决方案资源管理器中打开db1.mdb,发现没有写入更新的数据,
打开...\Visual Studio 2005\Projects\Rigister\Rigister目录下的db1.mdb写没有写入,只有在
...\Visual Studio 2005\Projects\Rigister\Rigister\bin\Debug目录下的db1.mdb写入了更新的数据,但重新运行后新写入的数据也会丢失,如何能够将更新的数据永久性写入数据库呢?运行后执行了MessageBox.Show("rigister successfully!")
public bool Insert(string name, string pass)
{
bool boo = false;
try
{
OleDbConnection conn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=db1.mdb");
conn.Open();
OleDbCommand cmd = new OleDbCommand(string.Format("insert into Users([name],psw) values ('{0}','{1}')", name, pass),conn); int i = cmd.ExecuteNonQuery();
if (i != 0)
{
boo = true;
}
conn.Close();
return boo;
}
catch (Exception es)
{
Console.WriteLine(es.Message);
return boo = false;
}我测试过了,我写的这样没有问题
DataRow dr=dt.newRow();dr["name"]='Name1';
dr["psw"]='pwd1';dt.rows.add(dr);DataAdapter.Update(dt);大体思路是这样的.这样的好处是如果名字和密码中有特殊符号,不至于SQL语句出错.
string ConString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Documents and Settings\db.mdb";
地址最好用觉得路径,在字符串前加个“@”
语句貌似没有什么问题。
更新没问题,你已经找到问题所在了,只是不知道为什么。
程序运行时是在debug目录下,改写的也是Debug目录下的db1.mdb。
当你再次运行程序的时候,VS.NET会自动再次拷贝你工程文件夹下的db1.mdb文件(更新前的)到DEBUG下,所以看上去没更新,事实是你更新的debug下的数据库,每次运行的时候又被复位了。
把DB1.MDB从解决方案里移除,这样每次VS.NET 就不会自动拷贝数据库文件到debug下了,你的数据就保存了。
mdb路径有问题的。
当你再次运行程序的时候,VS.NET会自动再次拷贝你工程文件夹下的db1.mdb文件(更新前的)到DEBUG下,所以看上去没更新,事实是你更新的debug下的数据库,每次运行的时候又被复位了。
把DB1.MDB从解决方案里移除,这样每次VS.NET 就不会自动拷贝数据库文件到debug下了,你的数据就保存了。
程序运行时是在debug目录下,改写的也是Debug目录下的db1.mdb。
当你再次运行程序的时候,VS.NET会自动再次拷贝你工程文件夹下的db1.mdb文件(更新前的)到DEBUG下,所以看上去没更新,事实是你更新的debug下的数据库,每次运行的时候又被复位了。
把DB1.MDB从解决方案里移除,这样每次VS.NET 就不会自动拷贝数据库文件到debug下了,你的数据就保存了。我移除数据库后又会报错找不到数据库了啊!
请问还有什么办法可以解决吗?
把数据库不要放在文件目录下,而是放在debug目录下。
另外连接字符串的路径不要如下
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|a.mdb
而应该是Provider=Microsoft.Jet.OLEDB.4.0;Data Source=a.mdb
现在明白了。