OleDbParameter在Access数据库Insert时参数不对应的怪现象[友情提示]
来源:互联网 发布:centos 源码安装lnmp 编辑:程序博客网 时间:2024/04/29 21:43
protected void signup_submit_ServerClick(object sender, ImageClickEventArgs e)
{
//入数据库
string connStr = EightourConfiguration.DbConnectionString;
string loginNameValue = LoginName.Value;
string passwordValue = Password.Value;
string mobileValue = Mobile.Value;
string emailValue = Email.Value;
string sexValue = Sex.SelectedValue;
int sex = 2;
if (sexValue == "T")
{
sex = 1;
}
else if (sexValue == "F")
{
sex = 0;
}
string chineseNameValue = ChineseName.Value;
string addressValue = Address.Value;
string postcodeValue = Postcode.Value;
string telValue = Tel.Value;
//注意参数顺序
string updateSql = "insert into MB_BaseInfo ([LoginName],[Password],[ChineseName],[Sex]) values (@Para_LoginName,@Para_Password,@Para_ChineseName,@Para_Sex)";
OleDbCommand cmd = new OleDbCommand(updateSql);
//注意参数顺序与上面一一对应
OleDbParameter Para_LoginName = new OleDbParameter("@Para_LoginName", System.Data.OleDb.OleDbType.VarChar, 50);
Para_LoginName.Value = loginNameValue;
cmd.Parameters.Add(Para_LoginName);
OleDbParameter Para_Password = new OleDbParameter("@Para_Password", System.Data.OleDb.OleDbType.VarChar, 50);
Para_Password.Value = passwordValue;
cmd.Parameters.Add(Para_Password);
OleDbParameter Para_ChineseName = new OleDbParameter("@Para_ChineseName", System.Data.OleDb.OleDbType.VarChar, 50);
Para_ChineseName.Value = chineseNameValue;
cmd.Parameters.Add(Para_ChineseName);
OleDbParameter Para_Sex = new OleDbParameter("@Para_Sex", System.Data.OleDb.OleDbType.Integer);
Para_Sex.Value = sex;
cmd.Parameters.Add(Para_Sex);
int lastId = -1;
using (OleDbConnection myConnection = new OleDbConnection(connStr))
{
cmd.Connection = myConnection;
myConnection.Open();
OleDbTransaction trans = myConnection.BeginTransaction();
cmd.Transaction = trans;
try
{
cmd.ExecuteNonQuery();
cmd.CommandText = "select @@identity";
lastId = Convert.ToInt32(cmd.ExecuteScalar().ToString());
trans.Commit();
}
catch (Exception exc)
{
trans.Rollback();
throw new Exception(exc.Message);
}
finally
{
}
}
if (lastId == -1) return;
bool isSuccess = false;
//注意参数顺序
updateSql = "insert into MB_PersonalInfo ([BaseInfoId],[Tel],[Mobile],[Address],[Postcode],[Email]) values(@Para_BaseInfoId,@Para_Tel,@Para_Mobile,@Para_Address,@Para_Postcode,@Para_Email)";
cmd = new OleDbCommand(updateSql);
//注意参数顺序与上面并不一一对应
OleDbParameter Para_BaseInfoId = new OleDbParameter("@Para_BaseInfoId", System.Data.OleDb.OleDbType.Integer);
Para_BaseInfoId.Value = lastId;
cmd.Parameters.Add(Para_BaseInfoId);
OleDbParameter Para_Tel = new OleDbParameter("@Para_Tel", System.Data.OleDb.OleDbType.VarChar, 50);
Para_Tel.Value = telValue;
cmd.Parameters.Add(Para_Tel);
//这里现在是Postcode邮政编码,上面第三个参数是Mobile,不对应了。
OleDbParameter Para_Postcode = new OleDbParameter("@Para_Postcode", System.Data.OleDb.OleDbType.VarChar, 50);
Para_Postcode.Value = postcodeValue;
cmd.Parameters.Add(Para_Postcode);
OleDbParameter Para_Mobile = new OleDbParameter("@Para_Mobile", System.Data.OleDb.OleDbType.VarChar, 50);
Para_Mobile.Value = mobileValue;
cmd.Parameters.Add(Para_Mobile);
OleDbParameter Para_Address = new OleDbParameter("@Para_Address", System.Data.OleDb.OleDbType.VarChar,255);
Para_Address.Value = addressValue;
cmd.Parameters.Add(Para_Address);
OleDbParameter Para_Email = new OleDbParameter("@Para_Email", System.Data.OleDb.OleDbType.VarChar, 255);
Para_Email.Value = emailValue;
cmd.Parameters.Add(Para_Email);
using (OleDbConnection myConnection = new OleDbConnection(connStr))
{
cmd.Connection = myConnection;
myConnection.Open();
OleDbTransaction trans = myConnection.BeginTransaction();
cmd.Transaction = trans;
try
{
cmd.ExecuteNonQuery();
trans.Commit();
isSuccess = true;
}
catch (Exception exc)
{
trans.Rollback();
throw new Exception(exc.Message);
}
finally
{
}
}
if (isSuccess)
{
lblNotifier.Visible = true;
lblNotifier.Text = "<br /><font color='red'><b>你已成功注册!</b></font><script language='Javascript'>alert('恭喜您,注册成功!');</script>";
}
else
{
lblNotifier.Visible = false;
}
}
执行上面代码时,结果发现数据库表中Mobile的值成了Postcode的值,Address的值成了Mobile的值.....乱套了。
如果将上面的相关顺序调整一下,变成一一对应,就可以了。
在SQL Server数据库中就不会涉及此类问题。看来,是ACCESS的局限。
- OleDbParameter在Access数据库Insert时参数不对应的怪现象[友情提示]
- access数据库+SQL带OleDbParameter参数开发小企业网站
- OleDbParameter 在Access中的用法
- 对 Access 数据库中日期字段操作时 OleDbParameter 的问题及解决
- OleDbParameter参数的使用
- OleDbParameter在使用中需要注册参数的顺序
- 关于ACCESS下OleDbParameter的使用
- 发布数据库路径不对的问题. access
- ie的js出错提示与html代码保存格式时实际行数不对应
- ado。net在操作Access数据库时的参数问题
- 在ado和access的情况下,用INSERT INTO语句插入到数据库中
- Access提示Insert Into 语法错误
- 弹出信息提示窗口的代码;在Windows系统桌面右下角弹出友情提示窗口
- Access Update 语句的怪现象
- delphi与access的parameters.ParamByName提示"insert into''语法错误
- Access数据库的极限参数
- Oracle expdp parallel参数的设置值与生成文件个数不对应
- 类型转换构造函数隐式调用与运算符重载参数类型的不对应
- 一个25岁董事长给程序员的18条忠告
- 缺陷跟踪
- 问题:全选后删除没有问题,DataGridViewCheckBoxColumn
- C# 静态成员和方法的学习小结
- 什么才是好工作
- OleDbParameter在Access数据库Insert时参数不对应的怪现象[友情提示]
- Filesystem之Linux系统文件命令精通指南(下)
- “在强签名的程序集上运行单元测试失败”问题调查
- 新的困境
- gtk+中对字体大小及颜色的修改
- linux 文件系统结构
- Oracle中临时表的深入研究
- Delphi程序设计界面的动态调整
- test