C# 在SqlDataAdapter中将数据类型varchar转换为数值时出错

C# 在SqlDataAdapter中将数据类型varchar转换为数值时出错,c#,sql-server,type-conversion,C#,Sql Server,Type Conversion,我正在尝试从SQL中检索一个金额 我有一个表tbVendas,其中有一列ValorTotalVendas,数据类型为DECIMAL 我有以下选择查询 SELECT IdVendas AS 'Venda' FROM tbVendas WHERE ValorTotalVendas = '@valorTotal' 在我的指挥之下 SqlCommand comando = new SqlCommand(strSql, conn); comando.Parameters.Add("@valorTot

我正在尝试从SQL中检索一个金额

我有一个表
tbVendas
,其中有一列
ValorTotalVendas
,数据类型为
DECIMAL

我有以下选择查询

SELECT IdVendas AS 'Venda' 
FROM tbVendas 
WHERE ValorTotalVendas = '@valorTotal'
在我的指挥之下

SqlCommand comando = new SqlCommand(strSql, conn);
comando.Parameters.Add("@valorTotal", SqlDbType.Decimal);
comando.Parameters["@valorTotal"].Value = Convert.ToDecimal(txbValorFiltro.Text);

DataTable vendas = new DataTable();

conn.Open();

SqlDataAdapter sqdDA = new SqlDataAdapter(strSql, conn);
sqdDA.Fill(vendas);
但我得到了这个错误:

将数据类型varchar转换为数字时出错

有人能帮我吗?

试试这个

SELECT IdVendas AS 'Venda' FROM tbVendas WHERE ValorTotalVendas = @valorTotal
由于
@valorTotal'
的原因,您将面临错误,在将其更改为
@valorTotal

Rafael后,您将不再面临此问题

您必须删除查询的单引号:

"SELECT IdVendas AS 'Venda' FROM tbVendas WHERE ValorTotalVendas = @valorTotal"
SQL Server正在将“@valorTotal”解释为VARCHAR而不是DECIMAL


谢谢。

您可以尝试添加如下安全机制,以防止将来可能出现基于bata的错误:

decimal amount;
bool checkValue = Decimal.TryParse(txbValorFiltro.Text, out amount);

if(checkValue)
   comando.Parameters["@valorTotal"].Value = amount;
else
   comando.Parameters["@valorTotal"].Value = -1; //or null, if field is nullable

您的select语句如下所示:

SELECT IdVendas AS 'Venda' FROM tbVendas WHERE ValorTotalVendas = '@valorTotal'
请仔细查看
'@valorTotal'
。在任何sql语句中,
'
用于将值传递给任何列或其他列。但当使用'@'时,这意味着您正在将参数传递给列/单元格,以便将来可以将其用于多个操作

因此,基本问题是,您希望传递一个参数,但实际上是将其作为值传递。因此,要么传递一个值,要么传递一个参数:

  SELECT IdVendas AS 'Venda' FROM tbVendas WHERE ValorTotalVendas = 'YourValueHere'

 ///Or

 SELECT IdVendas AS 'Venda' FROM tbVendas WHERE ValorTotalVendas = @parameterHere

希望您能理解。

txbValorFiltro.Text的值是多少?您的操作系统中的小数点分隔符是多少?您是否检查以确保所有值都能转换为数字?这似乎是最明显的步骤。并且不要将数值作为非数值存储在数据库中。您需要删除参数名称周围的单引号:
从tbVendas中选择IdVendas作为“Venda”,其中VALORTALVENDAS=@valorTotal
。否则,它会将其视为字符串而不是参数名。如果您对此进行解释会更好:)@zackraiyan刚刚解释过。抱歉,但解释不多。。。但我很感激你贴出了答案…如果你愿意,你可以看看我的答案:)。。我们都是来互相帮助的,对吗?:)@zackraiyan当问题被发现时,你肯定能解释清楚。在你开始之前很久我们就已经回答了这个问题:),我不是故意伤害你的,伙计:(…我刚才指出的是为了让你得到更多的选票:(