Access数据库,用@@identity为什么得不到正确的自动增长列的值.
public int InsertProduct(string smallUrl,string bigUrl,string proName)
{
string sql = "insert into [product] ( smallImgUrl,bigImgUrl,proName) values( ' "+smallUrl+ " ', ' "+bigUrl+ " ', ' "+proName+ " ') ";
OleDbConnection conn = db.GetConn();
OleDbCommand com = new OleDbCommand();
com.Connection = conn;
com.CommandText = sql;
conn.Open();
com.ExecuteNonQuery();
com.CommandText= "select @@identity ";
com.Connection = conn;
int i=Convert.ToInt32(com.ExecuteScalar());
conn.Close();
return i;
//else { return 0; }
}
这是我写的一个方法,传了三个参数进来.插入数据后马上用@@identity查询,得到的值完全不对头.比如实际上数字都到40了,得的值才20几.
我在Access中用它的查询分析器,插入后再查询,值却是正确的.
望大侠赐教.
------解决方案--------------------Access,没有@@identity吧,
只能使用Select语句取出最大的值。
------解决方案--------------------用 ADO/ADO.NET 连接 Access 是支持 @@Identity 的
好像没有错啊,
------解决方案--------------------select Scope_Identity()
------解决方案--------------------嗯, 也许应该使用显示事务,否则隐式事务的话,
后一个 SELECT 与 前一个 INSERT 已经没有关系了
》》》
using (OleDbConnection conn = db.GetConn()) {
conn.Open();
OleDbTransaction trans = conn.BeginTransaction();
OleDbCommand com = new OleDbCommand();
com.Connection = conn;
com.Transaction = trans;
try {
com.CommandText = sql;
com.ExecuteNonQuery();
com.CommandText = "select @@identity ";
trans.Commit();
int i = Convert.ToInt32(com.ExecuteScalar());
return i;
}
catch {
trans.Rollback();
}
}
return -1;
------解决方案--------------------用access是比较麻烦
------解决方案--------------------access 可以用@@identity么?又学到一招:)