在 SQL Server Management Studio 中保存十进制值

问题描述 投票:0回答:1

我希望在 SQL Server Management Studio 中保存十进制值。

它们只是以四舍五入到最接近值的整数值的形式出现。

这是如何做到的?如果需要更多信息,我可以获取。

栏目:

ProductCode int Unchecked
ProductName text    Unchecked
SupplierCode    nvarchar(50)    Unchecked
Cost    decimal(5, 2)   Unchecked
Quantity    int Unchecked
RetailPrice decimal(5, 2)   Unchecked

表格输出

ProductCode ProductName SupplierCode    Cost    RetailPrice Quantity
--------------------------------------------------------------------
1              Milk       SW11           0         1          12

这是将其添加到数据库的 SQL 代码:

SqlCommand addProduct = new SqlCommand("INSERT INTO dbo.NCAProduct  VALUES(" + txtProductCode.Text + ", '" + txtProductName.Text + "', '" + txtSupplierCode.Text + "', " + txtCost.Text + ", " + txtRetail.Text + ", " + txtQuantity.Text + ");", sqlConnect);
sql sql-server decimal ssms
1个回答
1
投票

这里有几个问题:

  1. 如果 50 个字符对于名称来说太少,您需要将

    [ProductName]
    字段的数据类型更改为
    VARCHAR(50)
    或其他数字。但是,当 SQL Server 2005 推出时,
    text
    数据类型已被弃用,即使您仍在使用 SQL Server 2000,我也非常怀疑您的产品名称是否需要超过 8000 个字符;-)。
    TEXT
    的替代品是
    VARCHAR(MAX)
    ,适用于当情况实际上需要超过 8000 个字符时。

  2. 您需要参数化您的查询,因为在当前表单中,您的代码很容易受到 SQL 注入。

  3. 您无法在 SQL Server Management Studio (SSMS) 中保存小数。您可以保存查询,也可以保存结果,但 SSMS 是一个 IDE。您可能的意思是您无法使用 .NET 将十进制值保存到 SQL Server。

  4. 虽然 INSERT 语句不需要,但指定列列表始终是一个好主意,因为列的顺序可能不是您所期望的,并且如果您添加列,则此 INSERT 将失败。意思是,而不是:

    INSERT INTO dbo.NCAProduct VALUES(...);
    

    做:

    INSERT INTO dbo.NCAProduct
                  (ProductCode, ProductName, SupplierCode, Cost, RetailPrice, Quantity)
    VALUES(...);
    

    如果没有看到您尝试插入的值(这将有助于缩小问题范围),我会说这是问题最有可能的原因,假设初始“/// Columns”列表中的列顺序是实际订单。如果您查看字段插入的顺序,会发现

    txtRetail.Text
    txtQuantity.Text
    会互换,因为表格先是
    Quantity
    ,然后是
    RetailPrice
    。在 INSERT 中指定字段列表可以消除此问题,即使这不是此处的实际问题。

如果 #4 不是问题,那么您需要调试并逐步查看

txtRetail.Text
txtQuantity.Text
的值,因为它们连接到
SqlCommand
时存在。

© www.soinside.com 2019 - 2024. All rights reserved.