今天我在写程序的时候碰到了非常奇怪的问题:也许是ACCSS本身有什么问题
用sqlserver 2000没有出现问题
例子:
 conn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="
              + System.Web.HttpContext.Current.Server.MapPath(ConfigurationManager.ConnectionStrings["DbPath"].ToString());
        conn.Open();
        OleDbCommand comm = new OleDbCommand();
        comm.Connection = conn;
        OleDbTransaction tx = conn.BeginTransaction();        //SqlConnection conn = new SqlConnection();
       
        //conn.ConnectionString = "Data Source=(local);Initial Catalog=Demo;User ID=sa;Password=greedisgood";
        //conn.Open();
        //SqlCommand comm = new SqlCommand();
        //comm.Connection = conn;
        
        //SqlTransaction tx = conn.BeginTransaction();
        comm.Transaction = tx;
        try
        {
        //    class 一对多 完整约束 Product 一对多 完整约束 userTable
            string cls = "Insert into Class(class)values('123123');";
            string product = "Insert into Product(product,class)values('123123',@Class);";
            string user = "Insert Into userTable(username,productID) values('123123123',@Product);";            long cId = 0;
            comm.CommandText = cls;
            comm.ExecuteNonQuery();
          comm.CommandText = "SELECT @@IDENTITY AS ID;";
          cId = Convert.ToInt64(comm.ExecuteScalar());            long pId;
            comm.CommandText = product;
            comm.Parameters.AddWithValue("@Class", cId); 
            comm.ExecuteNonQuery();
            comm.CommandText = "SELECT @@IDENTITY AS ID;";
            pId = Convert.ToInt64(comm.ExecuteScalar());//错误地点 似乎我插入这条数据的时候上一条数据还没有写进数据库中 结果 提示我“由于数据表 'Product' 需要一个相关记录,不能添加或修改记录”,这条错误是因为我 product 对 userTable 是一对多的关系 有完整性约束 ,提示我Product没有对应的数据,但是上条语句PID都可以获得 我已经调试很多边了 你们也可以试试;但是如果我把clsSQL语句去掉 comm.Parameters.AddWithValue("@Class", 1); CID用硬编码从class表上取个ID值 就可以顺利执行,不知道为什么 
            comm.CommandText = user;                   
            comm.Parameters.AddWithValue("@Product", pId);
            comm.ExecuteNonQuery();                             tx.Commit();
        }
        catch (Exception e1)
        {
            
          tx.Rollback();
            conn.Close();
            throw e1;
        }

解决方案 »

  1.   

    怎么恐怕不能用语言说清楚 你如果有VS的话复制一下再用ACCSS照 我上面的约束建3个表试一下 
      

  2.   

    你们可以用sqlserver也试一下  我现在理解ACCSS为什么不是数据库了 而是数据文件了。
      

  3.   

    不用试,@@IDENTITY的值是当前会话所有作用域中的自增值,你看一下你的逻辑是不是有问题,或者是遗漏了什么
      

  4.   

    sqlserver可以的为什么 逻辑的是 就是插入一个CLASS 取出插入值的自增ID,product 用CLASS的ID 关联在取出 Product新插入的值的ID usertable用product 的ID关联
      

  5.   

    不信改成如下再试,然后再发表你的评论。           string product = "Insert into Product(product,class)values('123123',?);";
    comm.Parameters.AddWithValue("?", cId); 
      

  6.   

    无语 “?”是java的占位符吧 你有没有明白我的意思啊