日期:2014-05-17  浏览次数:20975 次

C#向ACCESS中插入数据的自增列问题
我的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 语句有错。