OleDbParameter在Access資料庫Insert時引數不對應的怪現象[友情提示]
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 = "
你已成功註冊!
}
else
{
lblNotifier.Visible = false;
}
}
執行上面程式碼時,結果發現資料庫表中Mobile的值成了Postcode的值,Address的值成了Mobile的值.....亂套了。
如果將上面的相關順序調整一下,變成一一對應,就可以了。
在SQL Server資料庫中就不會涉及此類問題。看來,是ACCESS的侷限。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/14601556/viewspace-528473/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 在開啟dbcc連線資料庫檢視資料庫配置引數時提示SQL1337錯誤資料庫SQL
- 機器學習近年來之怪現象機器學習
- 資料庫的讀現象淺析資料庫
- 「SAP 技術」SAP BP顯示供應商賬戶組時候的怪現象
- 非Access資料庫在VB的程式設計及應用 (轉)資料庫程式設計
- linux下使用ls命令時遇到的一個怪異現象Linux
- JavaScript中this的一些怪異現象JavaScript
- 在ASP中壓縮ACCESS資料庫資料庫
- 關於MySQL啟動時,丟失資料檔案不報錯的現象MySql
- MySQL資料庫引數MySql資料庫
- 【IMPDP】當匯入資料時遭遇表已存時的應對手段——TABLE_EXISTS_ACTION引數
- PG資料庫更新刪除卡死現象資料庫
- SQL Server連線ACCESS資料庫的實現 (轉)SQLServer資料庫
- 調整資料庫引數資料庫
- Access資料庫日常維護和Access資料庫最佳化方法資料庫
- 3.1.2 啟動時指定資料庫初始化引數資料庫
- 在 mysql 下 建立新的資料庫和對應的表MySql資料庫
- 金航數碼選擇應用 TDengine 時序資料庫,改造現有資料庫架構資料庫架構
- 從一道題來看看golang中的slice作為引數時的現象Golang
- mybatis怎麼實現insert into多個資料-oracle資料庫MyBatisOracle資料庫
- 顯示資料庫所有引數資料庫
- Oracle 資料庫引數調整Oracle資料庫
- Oracle資料庫系統中的引數Oracle資料庫
- Oracle資料庫中的系統引數Oracle資料庫
- ACCESS 在資料表中實現簡單計算
- MySQL如何髮型不亂的應對半年數十TB資料增量MySql
- Access 匯入 oracle 資料庫Oracle資料庫
- PHP 連線access資料庫PHP資料庫
- C# 操作 access 資料庫C#資料庫
- java連線access資料庫Java資料庫
- 資料分析師如何應對資料庫取數後的離線分析資料庫
- Thread pool引數引起的程式連線資料庫響應慢thread資料庫
- Oracle 資料庫應急寶典(二)_引數檔案篇Oracle資料庫
- 天翼雲RDS資料庫如何修改資料庫引數資料庫
- 發現10G RAC設定引數一個奇怪的現象
- 用insert all實現同時向多表插入資料
- 11.1資料庫版本修改memory_target引數應避開4的倍數資料庫
- 資料庫易混淆引數名以及引數檔案啟動資料庫到nomount狀態資料庫