[英]Is there a function in SQL Server to convert to a decimal number?
我在一列中有一个单元格值为“12,000”。 而我想改为“11,000”并显示它......但它只显示一个空白区域。 在数据库中,该值显示为 NULL。
在数据库中,类型为Decimal(18,3)
。
我在C#的代码是这样的:
decimal dec = Convert.ToDecimal(dgvRow.Cells[16].Value.ToString());
string query = "UPDATE cabecdoc SET CDU_Peso = TRY_CONVERT(DECIMAL(18,3),'" + dec + "' ) WHERE Id = '" + idDoc + "'";
如果我进行查询:
UPDATE CabecDoc
SET CDU_Peso = TRY_CONVERT(DECIMAL(18,3), '11.000')
WHERE Id = 'fb9668a9-46fa-11ec-9494-00155d01b010'
在 Microsoft SQL 服务器中 - 它可以工作......但在我的 C# 程序中它显示一个空格值。
好的,假设文本值没有 $(或货币字符),那么这将起作用:
string strSQL = "UPDATE cabecdoc " +
"SET CDU_Peso = @Peso " +
"WHERE Id = @ID";
using (SqlCommand cmdSQL = new SqlCommand(strSQL, conn))
{
conn.Open();
cmdSQL.Parameters.Add("@Peso", SqlDbType.Decimal).Value = dgvRow.Cells[16].Text;
cmdSQL.Parameters.Add("@ID", SqlDbType.NVarChar).Value = idDoc;
cmdSQL.ExecuteNonQuery();
}
因此,如果单元格具有:
12000
12,000
12,000.00
然后以上将正常工作。
但是,如果单元格要具有:
$12,000.00
然后你需要为此使用全球化转换器。
像这样说:
// -- using System.Globalization;
Decimal TestNum = 0;
decimal.TryParse(TextBox1.Text,
NumberStyles.Currency,
CultureInfo.CurrentCulture.NumberFormat, out TestNum);
现在,如果转换器失败,那么 TestNum 将不会改变(上面的“out”返回值),然后我们现在有这个:
string strSQL = "UPDATE cabecdoc " +
"SET CDU_Peso = @Peso " +
"WHERE Id = @ID";
using (SqlCommand cmdSQL = new SqlCommand(strSQL, conn))
{
conn.Open();
cmdSQL.Parameters.Add("@Peso", SqlDbType.Decimal).Value = TestNum;
cmdSQL.Parameters.Add("@ID", SqlDbType.NVarChar).Value = idDoc;
cmdSQL.ExecuteNonQuery();
}
而第一个只要没有货币字符(如“$”)就可以工作?
嗯,它会工作,但第一个例子不处理“”(空字符串)。
所以,你可以说使用这个:
string MyPeso = dgvRow.Cell[16].Text;
if (MyPeso == "")
MyPeso = "0";
....
cmdSQL.Parameters.Add("@Peso", SqlDbType.Decimal).Value = MyPeso;
此外,如前所述,不仅使用参数更容易 - 您甚至不必知道(或思考)是否需要包围值 - 因此 sql 更容易阅读,并且如前所述,它是 sql注射安全。
例如这个:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.