SELECT @@IDENTITY 绝对奇怪 不信你试试
今天我在写程序的时候碰到了非常奇怪的问题:也许是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;
}