我使用下面的代码来获取数据库中存在的记录数,但不知何故它不起作用。
给我一个错误:
输入字符串的格式不正确。
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.
}
答案 0 :(得分:0)
如果该字段的数据类型为nvarchar等效(非数字),则需要在分配给OrderId的值之前和之后使用单引号。
您的代码:
(OrderId =" + Convert.ToInt32(txtOrderNo.Text)+")&#34 ;;
插入单个qutations的正确代码:
(OrderId ='" + txtOrderNo.Text +"')";
答案 1 :(得分:0)
此错误来自您构建SQL查询的Convert.ToInt32
。这意味着txtOrderNo.Text
或row.Cells[1].Value
包含非整数值,小数点或只是空字符串。在Convert.ToInt32
的MSDN文档中,{:1}}将在以下情况下抛出:
值不包含可选符号后跟一系列数字(0到9)。
此外,您(尝试)将数字转换为FormatException
,然后将它们用作字符串,这是一项冗余操作。简单的解决方案是删除转换操作,但仍会留下无效的SQL语句,并且对SQL注入攻击非常开放。