.NET中獲取Access新增記錄Id怪現(xiàn)象解決方法
using System;
using System.Data.OleDb;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine(GetUserId("dnawo"));
Console.ReadKey();
}
/// <summary>
/// 獲取用戶(hù)Id
/// </summary>
/// <param name="name"></param>
/// <returns></returns>
static int GetUserId(string name)
{
using (OleDbConnection conn = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=F:\db1.mdb"))
{
conn.Open();
using (OleDbCommand cmd = new OleDbCommand())
{
cmd.Connection = conn;
cmd.CommandText = "select Id from UserTB where UserName='" + name + "'";
object val = cmd.ExecuteScalar();
if (val != null)
return int.Parse(val.ToString());
else
{
cmd.CommandText = string.Format("insert into UserTB(UserName) values('{0}')", name);
cmd.ExecuteNonQuery();
return GetUserId(name);
}
}
conn.Close();
}
}
}
}
經(jīng)測(cè)試,當(dāng)用戶(hù)不存在時(shí),執(zhí)行上邊代碼后Access表中總會(huì)新增兩條一樣的記錄:

改用SQL Server數(shù)據(jù)庫(kù)不會(huì)有上述問(wèn)題,經(jīng)多次測(cè)試又發(fā)現(xiàn),若在"return GetUserId(name);"處設(shè)置斷點(diǎn),稍停一會(huì)也不會(huì)出現(xiàn)上述問(wèn)題。最終代碼修改如下運(yùn)行正常:
using System;
using System.Data.OleDb;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine(GetUserId("dnawo"));
Console.ReadKey();
}
/// <summary>
/// 獲取用戶(hù)Id
/// </summary>
/// <param name="name"></param>
/// <returns></returns>
static int GetUserId(string name)
{
int id = 0;
using (OleDbConnection conn = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=F:\db1.mdb"))
{
conn.Open();
using (OleDbCommand cmd = new OleDbCommand())
{
cmd.Connection = conn;
cmd.CommandText = "select Id from UserTB where UserName='" + name + "'";
object val = cmd.ExecuteScalar();
if (val != null)
id = int.Parse(val.ToString());
else
{
cmd.CommandText = string.Format("insert into UserTB(UserName) values('{0}')", name);
cmd.ExecuteNonQuery();
}
}
conn.Close();
}
return id == 0 ? GetUserId(name) : id;
}
}
}
相關(guān)文章
動(dòng)態(tài)ItemTemplate的實(shí)現(xiàn)(譯) - item,template
動(dòng)態(tài)ItemTemplate的實(shí)現(xiàn)(譯) - item,template...2007-02-02asp.net 生成靜態(tài)時(shí)的過(guò)濾viewstate的實(shí)現(xiàn)方法
有時(shí)候我們?cè)谟胊sp.net生成靜態(tài)文件的時(shí)候,總會(huì)出現(xiàn)一些viewstate的字符,因?yàn)槭庆o態(tài)的不是aspx文件,所有沒(méi)必要留了,精簡(jiǎn)代碼等原因,大家就需要看下面的方法了。2009-03-03IIS應(yīng)用池回收造成Application_Start中定時(shí)執(zhí)行程序停止的問(wèn)題的解決方法
最近在做一個(gè)項(xiàng)目,需要在程序中定時(shí)不斷的執(zhí)行某些操作,結(jié)果發(fā)現(xiàn)每天7,8點(diǎn)過(guò)后到第二天9點(diǎn),定時(shí)程序經(jīng)常都沒(méi)有在執(zhí)行,后來(lái)才知道由于IIS的應(yīng)用池回收導(dǎo)致Application停止。2010-03-03為密碼文本框要求不可粘帖字符串只可手動(dòng)輸入(附演示動(dòng)畫(huà))
以前開(kāi)發(fā)程序時(shí),用戶(hù)登錄的密碼文本框,是可以粘帖密碼字符串的,為了安全起見(jiàn)用戶(hù)要求不要粘帖,只能由手動(dòng)輸入,感興趣的朋友可以了解下2013-01-01排除JQuery通過(guò)HttpGet調(diào)用WebService返回Json時(shí)“parserror”錯(cuò)誤
排除JQuery通過(guò)HttpGet調(diào)用WebService返回Json時(shí)“parserror”錯(cuò)誤的解決方法。2011-10-10.net后臺(tái)代碼調(diào)用前臺(tái)JS的兩種方式
這篇文章主要介紹了.net后臺(tái)代碼調(diào)用前臺(tái)JS的兩種方式,需要的朋友可以參考下2014-03-03