C#向ACCESS中插入数据的自增列问题

cqulyk 2013-01-16 03:25:39
我的Access数据库的L_Logins表中有4个字段 ID为自增列 另外三个字段为 UserName,PassWord,Email

我用C#向该表插入数据的时候遇到问题。
1 如果我的Sql 语句不包含ID,则会抛出异常,说我的Sql中的字段和表字段不一致。插入失败。
代码如下:
string cmdString = @"INSERT INTO T_Logins VALUES(@UserName,@PassWord,@Email)";
OleDbParameter[] oleParameters = new OleDbParameter[]
{
//new OleDbParameter("@ID",1),
new OleDbParameter("@UserName",loginsModel.UserName),
new OleDbParameter("@PassWord",loginsModel.PassWord),
new OleDbParameter("@Email",loginsModel.Email)
};

2 如果我在Sql语句中增加ID这个字段 则又不抛异常说我没有为ID指定默认值。插入失败。
代码如下:
string cmdString = @"INSERT INTO T_Logins VALUES(@ID,@UserName,@PassWord,@Email)";
OleDbParameter[] oleParameters = new OleDbParameter[]
{
new OleDbParameter("@ID",OleDbType.BigInt),
new OleDbParameter("@UserName",loginsModel.UserName),
new OleDbParameter("@PassWord",loginsModel.PassWord),
new OleDbParameter("@Email",loginsModel.Email)
};


3 既然说没有指定默认值,那我就给ID指定默认值为1。第一条数据可以插入,第二条数据肯定又报错了,因为主键重复。插入失败。
string cmdString = @"INSERT INTO T_Logins VALUES(@ID,@UserName,@PassWord,@Email)";
OleDbParameter[] oleParameters = new OleDbParameter[]
{
new OleDbParameter("@ID",1),
new OleDbParameter("@UserName",loginsModel.UserName),
new OleDbParameter("@PassWord",loginsModel.PassWord),
new OleDbParameter("@Email",loginsModel.Email)
};

return (int)AccessHelper.ExecuteNonQuery(cmdString, oleParameters);


4 既然这样所有情况都试验了,那我就再改一下Sql语句把要的字段加上吧。同样是异常,说INSERT INTO 语句有错。
于是有如下代码:
string cmdString = @"INSERT INTO T_Logins(UserName,PassWord,Email) VALUES(@UserName,@PassWord,@Email)";
OleDbParameter[] oleParameters = new OleDbParameter[]
{
new OleDbParameter("@UserName",loginsModel.UserName),
new OleDbParameter("@PassWord",loginsModel.PassWord),
new OleDbParameter("@Email",loginsModel.Email)
};

return (int)AccessHelper.ExecuteNonQuery(cmdString, oleParameters);


我都要 崩溃了。。。求大家帮忙。
...全文
930 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
leehom0754 2013-03-09
  • 打赏
  • 举报
回复
无语,居然是要加 ` ` 括起来,如果不是看到楼主的解决方案,不然不知道要多久才能解决这个问题
一一一一 2013-01-16
  • 打赏
  • 举报
回复
好吧,学习了
cqulyk 2013-01-16
  • 打赏
  • 举报
回复
因为ID是一个自增字段,所以在Sql语句中可以不写它。
cqulyk 2013-01-16
  • 打赏
  • 举报
回复
谢谢各位的回答,所有问题的原因都是由于Accesss关键字引起的。 UserName 和 PassWord在Access中是关键字,所以不能直接写
string cmdString = @"INSERT INTO T_Logins(UserName,PassWord,Email) VALUES(@UserName,@PassWord,@Email)";
也不能用[]把字段括起来,在Sql Server中可以这样,但在Access中这样不行。
string cmdString = @"insert into T_Logins(UserName,PassWord,Email) VALUES (@UserName,@PassWord,@Email)";
应该用键盘1左边的那个键 · 把字段括起来,这样才有用。
string cmdString = @"insert into T_Logins(`UserName`,`PassWord`,Email) VALUES (@UserName,@PassWord,@Email)";
我在网上找了很久,都没有给出正确答案的,不得不去求教一个有10年开发经验的高人。经验丰富也是一种资本呀,人家捣鼓几下就把问题解决了。
  • 打赏
  • 举报
回复
INSERT INTO T_Logins([UserName],[PassWord],[Email]) VALUES(?,?,?)
bdmh 2013-01-16
  • 打赏
  • 举报
回复
第一个,inert字段必须匹配 第二个,你是有id参数,但是没有给id赋值,你好好看看,你只是说明了id的类型 第三个,id是主键吧,你每次都赋值为1,不允许重复 第四个, string cmdString = @"INSERT INTO T_Logins([UserName],[PassWord],[Email]) VALUES(@UserName,@PassWord,@Email)";

111,120

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧