查询以从MS Access数据库获取记录计数

时间:2015-04-30 13:31:21

标签: c# sql winforms oledb

我使用下面的代码来获取数据库中存在的记录数,但不知何故它不起作用。

给我一​​个错误:

  

输入字符串的格式不正确。

conn.Open();                       
OleDbCommand cmd1 = new OleDbCommand();
cmd1.CommandText = "select count(*) from Orders_Description where (ItemCode=" + Convert.ToInt32(row.Cells[1].Value) + ") and (OrderId=" + Convert.ToInt32(txtOrderNo.Text) + ")";
int recordExists = Convert.ToInt32(cmd1.ExecuteScalar());
if (recordExists > 0)
{
    //Insert command if record exists.
}

2 个答案:

答案 0 :(得分:0)

如果该字段的数据类型为nvarchar等效(非数字),则需要在分配给OrderId的值之前和之后使用单引号。

您的代码:

(OrderId =" + Convert.ToInt32(txtOrderNo.Text)+")&#34 ;;

插入单个qutations的正确代码:

(OrderId ='" + txtOrderNo.Text +"')";

答案 1 :(得分:0)

此错误来自您构建SQL查询的Convert.ToInt32。这意味着txtOrderNo.Textrow.Cells[1].Value包含非整数值,小数点或只是空字符串。在Convert.ToInt32的MSDN文档中,{:1}}将在以下情况下抛出:

  

值不包含可选符号后跟一系列数字(0到9)。

此外,您(尝试)将数字转换为FormatException,然后将它们用作字符串,这是一项冗余操作。简单的解决方案是删除转换操作,但仍会留下无效的SQL语句,并且对SQL注入攻击非常开放。