我需要保存在 C# 表格中插入的信息:
进入我在 Access 2003 数据库中的表:FattureVoci
我的 C# 中的查询是:
cmd1.CommandText = "INSERT INTO FattureVoci ([IDVoce],[CodiceArticolo],[Descrizione],[Quantita],[PrezzoUnitario]) VALUES (@Id,@Prod,@Descr,@Qta,@Prezzo)";
cmd1.Parameters.AddWithValue("@Categ", this.Categoria.Text);
cmd1.Parameters.AddWithValue("@Prod", this.Prodotto.Text);
cmd1.Parameters.AddWithValue("@Data", this.Data.Text);
cmd1.Parameters.AddWithValue("@Iva", Convert.ToInt32(this.PartitaIVA.Text) );
cmd1.Parameters.AddWithValue("@Descr", this.Descrizione.Text);
cmd1.Parameters.AddWithValue("@Qta", Convert.ToInt32(this.Qta.Text));
cmd1.Parameters.AddWithValue("@Intest", this.Intestatario.Text);
cmd1.Parameters.AddWithValue("@Id", Convert.ToInt32(this.id.Text));
cmd1.Parameters.AddWithValue("@Prezzo", Convert.ToInt32(this.Prezzo.Text));
我的数据库中的字段是:
错误是(条件表达式中的数据类型不匹配):
最佳答案
你的代码的问题是参数插入的顺序。
这对于 OleDb 至关重要,因为 OleDb 无法通过名称识别参数。它使用占位符在命令文本中的位置来分配相应的参数值。
(OleDb 使用问号作为参数占位符,但毫不奇怪,对于 Access,您还可以使用 @ 前缀,这可能会简化到 Sql Server 的升级)。
因此,当您将 @Categ 作为第一个参数添加时,OleDb 获取它的值并尝试将其分配给 IDVoce 字段。当然,这会因上述错误而失败。
当然,您不能提供比您在查询中设置的更多的参数。
cmd1.CommandText = @"INSERT INTO FattureVoci
([IDVoce],[CodiceArticolo],[Descrizione],[Quantita],[PrezzoUnitario])
VALUES (@Id,@Prod,@Descr,@Qta,@Prezzo)";
cmd1.Parameters.AddWithValue("@Id", Convert.ToInt32(this.id.Text));
cmd1.Parameters.AddWithValue("@Prod", this.Prodotto.Text);
cmd1.Parameters.AddWithValue("@Descr", this.Descrizione.Text);
cmd1.Parameters.AddWithValue("@Qta", Convert.ToInt32(this.Qta.Text));
cmd1.Parameters.AddWithValue("@Prezzo", Convert.ToDecimal(this.Prezzo.Text));
// Actually your query doesn't include these parameters,
// so you can't put it in the collection
// cmd1.Parameters.AddWithValue("@Data", this.Data.Text);
// cmd1.Parameters.AddWithValue("@Categ", this.Categoria.Text);
// cmd1.Parameters.AddWithValue("@Iva", Convert.ToInt32(this.PartitaIVA.Text) );
//cmd1.Parameters.AddWithValue("@Intest", this.Intestatario.Text);
我已经重新排列了插入参数的顺序以对应于字段名称,但您的字段 Prezzo 似乎是 decimal 类型,而不是 integer,因此如果是这种情况,则需要进行不同的转换
作为最后一点,如果 IDVoce
字段是一个 AutoIncrement 字段,那么您不能在查询中为其值传递参数,您将寻找下一个自动增量数字的工作留给数据库。
关于c# - 将数据插入数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23077562/