我试图从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转换为数字
时出错
有人可以帮助我吗?
答案 0 :(得分:1)
您的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
希望你明白。
答案 1 :(得分:0)
试试这个
SELECT IdVendas AS 'Venda' FROM tbVendas WHERE ValorTotalVendas = @valorTotal
由于'@valorTotal'
,您正面临错误,将其更改为@valorTotal
答案 2 :(得分:0)
圣拉斐尔
您必须删除查询的单引号:
"SELECT IdVendas AS 'Venda' FROM tbVendas WHERE ValorTotalVendas = @valorTotal"
SQL Server将'@valorTotal'解释为VARCHAR而不是DECIMAL。
感谢。
答案 3 :(得分:0)
您可以尝试添加如下所示的安全机制,以防止潜在的基于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