.NET中獲取Access新增記錄Id怪現(xiàn)象解決方法
更新時間:2012年03月01日 20:46:10 作者:
寫了一個函數(shù)獲取Access表中指定用戶Id,要求當(dāng)傳入的用戶名不存在時,則在表中新增一條記錄并返回Id
復(fù)制代碼 代碼如下:
using System;
using System.Data.OleDb;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine(GetUserId("dnawo"));
Console.ReadKey();
}
/// <summary>
/// 獲取用戶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)測試,當(dāng)用戶不存在時,執(zhí)行上邊代碼后Access表中總會新增兩條一樣的記錄:

改用SQL Server數(shù)據(jù)庫不會有上述問題,經(jīng)多次測試又發(fā)現(xiàn),若在"return GetUserId(name);"處設(shè)置斷點,稍停一會也不會出現(xiàn)上述問題。最終代碼修改如下運行正常:
復(fù)制代碼 代碼如下:
using System;
using System.Data.OleDb;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine(GetUserId("dnawo"));
Console.ReadKey();
}
/// <summary>
/// 獲取用戶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)文章
asp.net使用Socket.Send發(fā)送信息及Socket.SendFile傳輸文件的方法
這篇文章主要介紹了asp.net使用Socket.Send發(fā)送信息及Socket.SendFile傳輸文件的方法,結(jié)合實例形式分析了asp.net基于socket實現(xiàn)信息與文件傳輸?shù)南嚓P(guān)技巧,需要的朋友可以參考下2016-06-06
.Net中Task Parallel Library的進階用法
這篇文章介紹了.Net中Task Parallel Library的進階用法,文中通過示例代碼介紹的非常詳細。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-10-10
.Net Core自動化部署之利用docker版jenkins部署dotnetcore應(yīng)用的方法
這篇文章主要給大家介紹了關(guān)于.Net Core自動化部署之利用docker版jenkins部署dotnetcore應(yīng)用的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-06-06
asp.net5中的用戶認(rèn)證與授權(quán)(1)
Visual Studio 2015 Preview 除了給我們帶了了C# 6.0的新語法、跨移動的開發(fā)以外,還給我們帶來了ASP.NET5(也就是之前被稱作下一代ASP.NET的ASP.NET vNext)。本文給大家介紹asp.net5中的用戶認(rèn)證與授權(quán)(1),需要的朋友可以參考下2015-10-10
ASP.NET中實現(xiàn)jQuery Validation-Engine的Ajax驗證實現(xiàn)代碼
在jQuery的表變驗證插件中Validation-Engine是一款高質(zhì)量的產(chǎn)品,提示效果非常精美,而且里面包含了AJAX驗證功能2012-05-05
asp.net 分頁sql語句(結(jié)合aspnetpager)
一直用的是存儲過程分頁,小項目一般不寫存儲過程,就需要直接寫分頁sql語句。2009-01-01

