这是我的项目类添加按钮方法
2 * 3 * 4* 1
thismy CLSItems Class
private void btnEdit_Click(object sender, EventArgs e)
{
BL.CLSItems itemsADE = new BL.CLSItems();
try
{
itemsADE.EditItem(Convert.ToInt32(itemId.Text),
itemBarcode.Text, itemName.Text, itemGroup.Text,
itemCompany.Text, itemPlace.Text,
Convert.ToInt32(itemPrice.Text),
Convert.ToInt32(itemquantity.Text),
Convert.ToInt32(itemLimit.Text),
Convert.ToInt32(itemMaxDiscount.Text),
Convert.ToInt32(itemprofit.Text));
MessageBox.Show("تم تعديل البيانات بنجاح", "تعديل", MessageBoxButtons.OK, MessageBoxIcon.Information);
dataGridRefresh();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "خطأ", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
finally
{
connection.Close();
}
}
这是我的DataAccessLayer类
public void EditItem(int itemId, string itemBarcode,
string itemName, string itemGroup, string itemCompany,
string itemPlace, int itemPrice, int itemquantity,
int itemLimit, int itemMaxDiscount, int itemprofit)
{
DAL.DataAccessLayer Dal = new DAL.DataAccessLayer();
Dal.open();
string procedure = @"update Items
(itemBarcode,itemName,itemGroup,itemCompany,
itemPlace,itemPrice,itemquantity,itemLimit,itemMaxDiscount,
itemprofit)values
(@itemBarcode,@itemName,@itemGroup,@itemCompany,
@itemPlace,@itemPrice,@itemquantity,@itemLimit,@itemMaxDiscount,
@itemprofit) where itemId=@itemId";
//string procedure = @"update Items set
//itemBarcode=@itemBarcode, itemName=@itemName,
//itemGroup=@itemGroup,
//itemCompany=@itemCompany, itemPlace=@itemPlace,
//itemPrice=@itemPrice,
//itemquantity=@itemquantity, itemLimit=@itemLimit,
//itemMaxDiscount=@itemMaxDiscount, itemprofit=@itemprofit
//where itemId=@itemId ";
OleDbParameter[] param = new OleDbParameter[11];
param[0] = new OleDbParameter("@itemBarcode", OleDbType.VarChar);
param[0].Value = itemBarcode;
param[1] = new OleDbParameter("@itemName", OleDbType.VarChar);
param[1].Value = itemName;
param[2] = new OleDbParameter("@itemGroup", OleDbType.VarChar);
param[2].Value = itemGroup;
param[3] = new OleDbParameter("@itemCompany", OleDbType.VarChar);
param[3].Value = itemCompany;
param[4] = new OleDbParameter("@itemPlace", OleDbType.VarChar);
param[4].Value = itemPlace;
param[5] = new OleDbParameter("@itemPrice", OleDbType.Integer);
param[5].Value = itemPrice;
param[6] = new OleDbParameter("@itemquantity", OleDbType.Integer);
param[6].Value = itemquantity;
param[7] = new OleDbParameter("@itemLimit", OleDbType.Integer);
param[7].Value = itemLimit;
param[8] = new OleDbParameter("@itemMaxDiscount", OleDbType.Integer);
param[8].Value = itemMaxDiscount;
param[9] = new OleDbParameter("@itemprofit", OleDbType.Integer);
param[9].Value = itemprofit;
param[10] = new OleDbParameter("@itemId", OleDbType.Integer);
param[10].Value = itemId;
Dal.excuteCommand(procedure, param);
Dal.close();
}
问题是当我尝试更新我的访问数据库时,我收到此消息
输入字符串的格式不正确
有什么问题?在我的代码? 在我的数据库中?
public void excuteCommand(string procedure,OleDbParameter[] param)
{
OleDbCommand command = new OleDbCommand();
command.CommandType = CommandType.Text;
command.CommandText = procedure;
command.Connection = accessConnection;
if (param!=null)
{
command.Parameters.AddRange(param);
}
command.ExecuteNonQuery();
}
我使用了这个陈述和同样的问题
itemId/int,itemBarcode/Text ,itemName/Text,itemPlace/Text ,itemPrice/currency,itemquantity/int,itemLimit/int,itemMaxDiscount/int,itemprofit/currency
答案 0 :(得分:0)
update Items(...) values (....)
不是正确的SQL更新语法。 (我认为您对insert
语法感到困惑?)
正确的语法是您注释掉的:
update Items
set
itemBarcode=@itemBarcode,
itemName=@itemName,
itemGroup=@itemGroup,
itemCompany=@itemCompany,
itemPlace=@itemPlace,
itemPrice=@itemPrice,
itemquantity=@itemquantity,
itemLimit=@itemLimit,
itemMaxDiscount=@itemMaxDiscount,
itemprofit=@itemprofit
where itemId=@itemId
答案 1 :(得分:0)
您正在将大量变量传递给EditItem方法,并且您在输入文本框上盲目地调用Convert.ToInt32。但是,如果这些文本框中的任何一个包含无法转换为整数的值,则会出现无效字符串格式异常。
(例如,空白输入是无效的整数并触发异常)
您应该使用Int32.TryParse
检查输入是否有效为整数int id;
if(!Int32.TryParse(itemId.Text, out id))
{
MessageBox.Show("Invalid input for ID field! Please write a valid integer");
return;
}
int price;
if(!Int32.TryParse(itemPrice.Text, out price))
{
MessageBox.Show("Invalid input for the price field! Please write a valid integer");
return;
}
.... and so on for all integer values
itemsADE.EditItem(id,itemBarcode.Text, itemName.Text, itemGroup.Text,
itemCompany.Text, itemPlace.Text,
price, ......);
最后的笔记。
UPDATE语句需要以下语法:
UPDATE <tablename> SET <fieldname> = <value> WHERE <keyfield> = <keyvalue>
您确定要使用整数类型的价格字段吗?通常这些字段使用十进制数据类型定义,以正确处理货币值。