想写一个最基本的注册用户模块,两个文本框分别输入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并没有真正写入数据库文件中?如何才能把注册信息真正写入并保存在数据库中呢?初学者,请高手们指点一下,谢谢

解决方案 »

  1.   

    insert into Users(name,psw) 改成 insert into Users([name],psw)name在Access中是保留字
      

  2.   

    谢谢楼上.
    但改过后并没有解决我所说的问题啊,就是运行完程序后找开数据库文件db1.mdb展开表,发现刚才输入的数据并不在表里,如何才能够加进表里呢?
      

  3.   

    int i=cmd.ExecuteNonQuery(); 
    看看返回值是?还有
    string ConString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=db1.mdb
    Data Source=db1.mdb用绝对路径!!
    你看的那个数据库文件是不是就是这个!!!
      

  4.   

    有没有执行:MessageBox.Show("rigister successfully!")?这个代码没有问题,会不会是其他原因呢?
    譬如说你现在在release模式下,但看的是Debug文件夹下的数据库?
      

  5.   

    int i=cmd.ExecuteNonQuery(); 返回值是1
    项目名称为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!")
      

  6.   


     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;
                }我测试过了,我写的这样没有问题
      

  7.   

    string strsql = "insert into Users(name,psw) Values('" + textBox1.Text + "','" + this.textBox2.Text + "')"; 应该是SQL语句的问题,去掉 this. 试一下。string strsql = "insert into Users(name,psw) values('" + textBox1.Text + "','" + textBox2.Text + "')"; 
      

  8.   

    DataTable dt=new DataTable();
    DataRow dr=dt.newRow();dr["name"]='Name1';
    dr["psw"]='pwd1';dt.rows.add(dr);DataAdapter.Update(dt);大体思路是这样的.这样的好处是如果名字和密码中有特殊符号,不至于SQL语句出错.
      

  9.   


    string ConString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Documents and Settings\db.mdb";
    地址最好用觉得路径,在字符串前加个“@”
    语句貌似没有什么问题。
      

  10.   

    string strsql = "insert into Users(name,psw)Values('" + textBox1.Text + "','" + this.textBox2.Text + "')" ;  把Values中的值改为常量看可能写入。能写入就是TEXTBOX的问题,不能写入就看下数据库方面的问题。
      

  11.   


    更新没问题,你已经找到问题所在了,只是不知道为什么。
    程序运行时是在debug目录下,改写的也是Debug目录下的db1.mdb。
    当你再次运行程序的时候,VS.NET会自动再次拷贝你工程文件夹下的db1.mdb文件(更新前的)到DEBUG下,所以看上去没更新,事实是你更新的debug下的数据库,每次运行的时候又被复位了。
    把DB1.MDB从解决方案里移除,这样每次VS.NET 就不会自动拷贝数据库文件到debug下了,你的数据就保存了。
      

  12.   

     string ConString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=db1.mdb"; 
    mdb路径有问题的。
      

  13.   

    程序运行时是在debug目录下,改写的也是Debug目录下的db1.mdb。 
    当你再次运行程序的时候,VS.NET会自动再次拷贝你工程文件夹下的db1.mdb文件(更新前的)到DEBUG下,所以看上去没更新,事实是你更新的debug下的数据库,每次运行的时候又被复位了。 
    把DB1.MDB从解决方案里移除,这样每次VS.NET 就不会自动拷贝数据库文件到debug下了,你的数据就保存了。
      

  14.   

    我也遇到了相同的问题,不知道如何解决。19楼:
    程序运行时是在debug目录下,改写的也是Debug目录下的db1.mdb。 
    当你再次运行程序的时候,VS.NET会自动再次拷贝你工程文件夹下的db1.mdb文件(更新前的)到DEBUG下,所以看上去没更新,事实是你更新的debug下的数据库,每次运行的时候又被复位了。 
    把DB1.MDB从解决方案里移除,这样每次VS.NET 就不会自动拷贝数据库文件到debug下了,你的数据就保存了。我移除数据库后又会报错找不到数据库了啊!
    请问还有什么办法可以解决吗?
      

  15.   

    终于解决这个问题啊。
    把数据库不要放在文件目录下,而是放在debug目录下。
    另外连接字符串的路径不要如下
    Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|a.mdb
    而应该是Provider=Microsoft.Jet.OLEDB.4.0;Data Source=a.mdb
      

  16.   

    谢谢各位,我也遇到这样的问题,第一次使用ACCESS数据库不了解个中原因。
    现在明白了。