“条件表达式中的数据类型不匹配.” ACCESS 2010 和 C#
本文关键字:ACCESS 2010 不匹配 数据类型 条件 表达式 | 更新日期: 2023-09-27 18:37:21
我正在尝试在 Access 2010 中进行查询,但它一直给我这个错误"条件表达式中的数据类型不匹配"。
String sql1 = "INSERT INTO Formulario (Numero, Localidad, [Parroquia o Institucion], Fecha, [Id Institucion], Comunitaria, Observacion) VALUES (@Numero, @Localidad, [@Parroquia o Institucion], @Fecha, [@Id Institucion], @Comunitaria, @Observacion)";
mi_conexion.Open();
//insertar tabla formulario...........
dataCommand.CommandText = sql1;
dataCommand.Parameters.Add("@Numero", OleDbType.VarChar).Value = numero;
dataCommand.Parameters.Add("@Localidad", OleDbType.VarChar).Value = textBox_localidad.Text;
dataCommand.Parameters.Add("@Parroquia o Institucion", OleDbType.VarChar).Value = comboBox_instituciones.Text;
dataCommand.Parameters.AddWithValue("@Fecha", "#" + fecha.Value.Date.Day.ToString() + "/" + fecha.Value.Date.Month.ToString() + "/" + fecha.Value.Date.Year.ToString() + "#");
dataCommand.Parameters.Add("@Id Institucion", OleDbType.VarChar).Value = Int32.Parse(label_id2.Text);
dataCommand.Parameters.Add("@Observacion", OleDbType.VarChar).Value = obs;
if(radioButton_comunitaria.Checked)
{
dataCommand.Parameters.Add("@Comunitaria", OleDbType.VarChar).Value = true;
}
else
{
dataCommand.Parameters.Add("@Comunitaria", OleDbType.VarChar).Value = false;
}
dataCommand.ExecuteNonQuery();
我不知道可能是什么原因.....
我试过这个:
String sql1 = "INSERT INTO Formulario (Numero, Localidad, ParroquiaoInstitucion, Fecha, IdInstitucion, Comunitaria, Observacion) VALUES (?,?,?,?,?,?,?)";
mi_conexion.Open();
//insertar tabla formulario...........
dataCommand.CommandText = sql1;
dataCommand.Parameters.AddWithValue("Numero", numero);
dataCommand.Parameters.AddWithValue("Localidad", textBox_localidad.Text);
dataCommand.Parameters.AddWithValue("ParroquiaoInstitucion", comboBox_instituciones.Text);
dataCommand.Parameters.AddWithValue("Fecha", "#" + fecha.Value.Date.Day.ToString() + "/" + fecha.Value.Date.Month.ToString() + "/" + fecha.Value.Date.Year.ToString() + "#");
dataCommand.Parameters.AddWithValue("IdInstitucion", Int32.Parse(label_id2.Text));
if(radioButton_comunitaria.Checked)
{
dataCommand.Parameters.AddWithValue("Comunitaria", true);
}
else
{
dataCommand.Parameters.AddWithValue("Comunitaria", false);
}
dataCommand.Parameters.AddWithValue("Observacion", obs);
dataCommand.ExecuteNonQuery();
但它还没有工作 -_-.....
使用AddWithValue
而不是Add
方法。SQL服务器将为您决定哪种类型的数据!我举个例子。此外,OLE DB 不支持命名参数,仅支持未命名参数
dataCommand.Parameters.AddWithValue("?", true);
应按正确的顺序设置参数。以下是如何在 MSDN 中添加 OleDb 参数的源代码
Access 数据库(即使 OleDb 正在运行)不知道名称以 @ 开头的参数。
若要能够将参数与 MS Access 数据库引擎一起使用,请使用:
PARAMETERS [parameter1] type, [parameter2] type, [parameterN] type;
SELECT <FieldList>
FROM <TableName>
WHERE FieldName = [parameter1] AND ...
有关更多信息,请参阅:参数声明(Microsoft访问 SQL)
第二种方法是使用非命名参数:
SELECT <FieldList>
FROM <TableName>
WHERE FieldName = ? AND FieldName2 =?
但我更喜欢使用命名参数。
OleDb 希望您按照参数占位符在命令文本中出现的顺序添加参数。使用 Ms-Access 的 OleDb 也接受名称以 @ 开头的参数,没有问题(可能是为了简化升级到 Sql Server 的过程),但您应该绝对尊重顺序。
在代码中,将字段的参数Comunitaria
添加到字段的参数之后Observacion
这会产生不匹配问题,因为 OleDb 将 Comunitaria 的值传递给字段 Observacion,反之亦然。然后,Comunitaria 字段接收一个无法转换为布尔值(是/否)的值。
尝试以这种方式更改代码
if(radioButton_comunitaria.Checked)
{
dataCommand.Parameters.Add("@Comunitaria", OleDbType.VarChar).Value = true;
}
else
{
dataCommand.Parameters.Add("@Comunitaria", OleDbType.VarChar).Value = false;
}
dataCommand.Parameters.Add("@Observacion", OleDbType.VarChar).Value = obs;
dataCommand.ExecuteNonQuery();
您应该从中移除参数名称中的空格。它只会给你带来麻烦,不需要。
我还建议对 Fecha 字段使用正确的数据类型。如果 Access 需要日期,请不要尝试构建替换字符串,就像在 Access 界面中插入一样。
dataCommand.Parameters.AddWithValue("@Fecha", new DateTime(fecha.Value.Date.Year,
fecha.Value.Date.Month,
fecha.Value.Date.Day)