简单的c#连接access2007的问题

CNLAN 2010-01-21 11:54:02
原来一个使用sql server,这次帮朋友做个小东西,需要用到access,遇到几个问题:
1.好像access不是直接使用参数名,而是参数按赋值的先后顺序处理的?
2.access老提示语法错误,我把sql代码直接在access查询分析器能执行通过
3.access 不能直接使用了TransactionScope 处理 ,不知道大家平常使用事务用的是什么方法?


/// <summary>
/// 创建一个用户
/// </summary>
/// <param name="user">用户</param>
/// <returns></returns>
public User CreateUser(User user)
{
//using (System.Transactions.TransactionScope ts = new System.Transactions.TransactionScope())
//{

//
//创建混合码,同时对密码进行加密
//
string salt = SecurityHelper.CreateSalt(saltLength);
string passwordHash = SecurityHelper.SaltAndHash(user.Password, salt);
//
//插入用户
//

//
//在这里,一直报insert into 语法错误,我看了老半天就一直没看出来.
//

string sql = "INSERT INTO [User] (UserName,UserNameToLower,Email,DisplayName,Password,Salt,CreateTime,LastLoginTime,State)"
+ " VALUES (@UserName,@UserNameToLower,@Email,@DisplayName,@Passport,@Salt,@CreateTime,@LastLoginTime,@State)";
DbCommand cmd = db.GetSqlStringCommand(sql);
db.AddInParameter(cmd, "UserName", DbType.String, user.UserName);
db.AddInParameter(cmd, "UserNameToLower", DbType.String, user.UserName.ToLower());
db.AddInParameter(cmd, "Email", DbType.String, user.Email);
db.AddInParameter(cmd, "DisplayName", DbType.String, user.DisplayName);
db.AddInParameter(cmd, "Passport", DbType.String, passwordHash);
db.AddInParameter(cmd, "Salt", DbType.String, salt);
db.AddInParameter(cmd, "CreateTime", DbType.String, user.CreateTime);
db.AddInParameter(cmd, "LastLoginTime", DbType.String, user.LastLoginTime);
db.AddInParameter(cmd, "State", DbType.Int32, user.State);
db.ExecuteNonQuery(cmd);
//
//默认给用户授Users权限
//
sql = "INSERT INTO UserInRoles (UserName,RoleName) VALUES (@UserName,@RoleName)";
db.AddInParameter(cmd, "UserName", DbType.Int32, user.UserName);
db.AddInParameter(cmd, "RoleName", DbType.String, "Users");
db.ExecuteNonQuery(cmd);
//ts.Complete();
return user;
//}
}

...全文
353 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
CNLAN 2010-01-22
  • 打赏
  • 举报
回复
还是继续用@userName,这种写法兼容sql server,以后换数据库,就直接改配置连接就行,不用改代码
CNLAN 2010-01-22
  • 打赏
  • 举报
回复
呵呵,yfqvip老兄,?userName执行不下去的,直接使用?还能执行...

insert into语法错误问题搞定了,与@没关系,原来是一个password,要使用[]包起来,晕死,这个还是关键词...

另外,事务还不知道怎么搞,不能使用TransactionScope 处理,挺郁闷的.
满衣兄 2010-01-22
  • 打赏
  • 举报
回复
把@userName直接改成 ?userName
我觉得我说的很清楚啊
CNLAN 2010-01-22
  • 打赏
  • 举报
回复
谢谢,你的意思是把@userName直接改成?,不要userName吗?
记得原来Mysql就直接使用?的...
不过改成问号(?)后,还是提示insert into语法错误
满衣兄 2010-01-21
  • 打赏
  • 举报
回复
把所有的“@”改成“?”
you know?

110,561

社区成员

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

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

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