使用 MS Access 的 C# 标准表达式中的数据类型不匹配?
Posted
技术标签:
【中文标题】使用 MS Access 的 C# 标准表达式中的数据类型不匹配?【英文标题】:Data type mismatch in criteria expression in C# with MS Access? 【发布时间】:2013-11-27 12:45:22 【问题描述】:您好,我尝试将表单中的数据保存到 MS Access 数据库。有 13 个字段要保存,但是当我单击此行上显示的保存按钮时出现错误 top.ExecuteNonQuery();
Data type mismatch in criteria expression
。
这是我的代码,尽可能帮助我
OleDbConnection conn = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:/Srihari/Srihari/Invoice.accdb");
conn.Open();
// to save top column in invoive
int invoicenumber = Convert.ToInt32(TXE_Invoice_Number.Text);
string terms = CBL_Terms.Text;
DateTime date = CBL_Date.DateTime;
string ourquote = TXE_OurQuote.Text;
string salesperson = CBL_Sales_Person.Text;
string customername = CBL_Customer_Nmae.Text;
string oderno = CBL_Order_Number.Text;
string invoiceaddress = TXE_Invoice_Address.Text;
string deliveryaddress = TXE_Delivery_Address.Text;
bool inclusive = CBX_New.Checked;
decimal Price = Convert.ToDecimal(TXE_Price.Text);
decimal tax = Convert.ToDecimal(TXE_Tax.Text);
decimal grandtotal = Convert.ToDecimal(TXE_Total.Text);
OleDbCommand top = new OleDbCommand("INSERT INTO test_top(InvoiceNumber,Terms,[InvoiceDate],OurQuote,SalesPerson,CustomerName,OrderNumber,InvoiceAddress,DeliveryAddress,InclusiveStatus,Price,Tax,GrandTotal) VALUES (" + invoicenumber + ",'" + terms + "','" + date + "','" + ourquote + "','" + salesperson + "','" + customername + "','" + oderno + "','" + invoiceaddress + "','" + deliveryaddress + "','" + inclusive + "','" + Price + "','" + tax + "','" + grandtotal + "')", conn);
top.ExecuteNonQuery();
MessageBox.Show("Inserted Successful (top)", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information);
conn.close();
在 Access 数据库中 13 列 InvoiceNumber 编号、条款文本、InvoiceDate 日期/时间、OurQuote 文本、SalesPerson 文本、CustomerName 文本、Orderno 文本、InvoiceAddress 备注、DeliveryAddress 备注、InclusiveStatus Yes/No、Price Decimal、Tax Decimal、GrandTotal Decimal .
我的代码出了什么问题?
【问题讨论】:
为什么在single Quotes
中传递十进制值??
嗨 kyle 1st 我试过这样 '"+ Price +"'
osame 错误来了,所以我像这样改变了但仍然错误
@SriHari - 请让自己熟悉 parameters 和 why 在没有使用它们的情况下永远不要使用数据库。
#corak, 刚接触 C# 能看清楚吗?
@SriHari - 我认为您尝试学习 C# 很棒。更有理由不去养成坏习惯。将数据直接注入 sql 命令是处理数据库时最糟糕的习惯之一。我希望提供的链接能帮助您学习“正确”的方法,这样您就不会在路上遭受痛苦和折磨。
【参考方案1】:
说真的,通过使用参数查询,省去你的麻烦,同时编写更可靠的代码:
OleDbCommand top = new OleDbCommand(
"INSERT INTO test_top (" +
"InvoiceNumber,Terms,[InvoiceDate],OurQuote," +
"SalesPerson,CustomerName,OrderNumber," +
"InvoiceAddress,DeliveryAddress,InclusiveStatus," +
"Price,Tax,GrandTotal" +
") VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?)", conn);
top.Parameters.AddWithValue("?", invoicenumber);
top.Parameters.AddWithValue("?", terms);
top.Parameters.AddWithValue("?", date);
top.Parameters.AddWithValue("?", ourquote);
top.Parameters.AddWithValue("?", salesperson);
top.Parameters.AddWithValue("?", customername);
top.Parameters.AddWithValue("?", oderno);
top.Parameters.AddWithValue("?", invoiceaddress);
top.Parameters.AddWithValue("?", deliveryaddress);
top.Parameters.AddWithValue("?", inclusive);
top.Parameters.AddWithValue("?", Price);
top.Parameters.AddWithValue("?", tax);
top.Parameters.AddWithValue("?", grandtotal);
top.ExecuteNonQuery();
【讨论】:
【参考方案2】:我认为您在保存到 Access Database
时应该知道的几点
1) String
应在 single Quotes
范围内
2) Numeric
值应该不在引号内
3) DateTime
值应使用 #
【讨论】:
嗨凯尔,如果我从Numeric
和 String
中删除双引号,则显示如下错误 Syntax error (missing operator) in query expression '+ invoicenumber +'.
我说的是Single Quotes
re:“访问无法自动从文本转换为 DateTime” - 实际上可以:INSERT INTO Clients (LastName, DOB) VALUES ('foo', '1961-06-16')
工作正常。
@kyle 看我上面的代码我这样写第一个" + invoicenumber + ",'" + terms + "'
第一个是数字,第二个是字符串,你告诉用单引号写字符串,而不是用引号写数字所以我删除了双引号从现在开始我的代码都是`+ invoicenumber + ,' + terms + '` 那么只有这样的错误。以上是关于使用 MS Access 的 C# 标准表达式中的数据类型不匹配?的主要内容,如果未能解决你的问题,请参考以下文章
在 MS Access 中保存来自 VB.Net Windows 窗体的数据时出现错误 System.Data.OleDb.OleDbException:“标准表达式中的数据类型不匹配”。
使用 c# 和 oledb 查询更新 Ms-Access 2010 中的列值
ms access 数据库中条件表达式异常中的数据类型不匹配