使用此代碼我搜索對應於參數categoryName的表中的id。如果不存在,我在表中插入值,然後返回密鑰。 當執行long idCategory = (long) id;
時,它有時會起作用,並且有時會拋出無效的轉換異常。爲什麼???所有的Postgresql插入後蒙上C異常拋出異常#
public static long GetCategoryID(String categoryName)
{
using (NpgsqlConnection conn = new NpgsqlConnection(ConfigurationManager.ConnectionStrings["myConn"].ToString()))
{
conn.Open();
NpgsqlTransaction transaction = conn.BeginTransaction();
String query = "SELECT idcategory FROM category WHERE categoryname = '" + categoryName + "';";
NpgsqlCommand cmd = new NpgsqlCommand(query, conn, transaction);
object id = cmd.ExecuteScalar();
if (id == null)
{
query = "INSERT INTO Category (categoryname) VALUES ('" + categoryName +"');";
cmd = new NpgsqlCommand(query, conn, transaction);
cmd.ExecuteNonQuery();
query = "SELECT LASTVAL();";
cmd = new NpgsqlCommand(query, conn, transaction);
id = cmd.ExecuteScalar();
}
long idCategory = (long)id;
transaction.Commit();
conn.Close();
return idCategory;
}
}
我認爲你應該使用:'CURRVAL(sequencename)'。你可以試試嗎? – Steve 2013-02-15 14:05:47