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

Save decimal values in SQL Server Management Studio

我希望在 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

///////// Table 输出

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);

这里有几个问题:

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

  2. 您需要参数化您的查询,因为在当前形式下,您的代码容易受到 SQL 注入。

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

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

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

    做:

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

    在没有看到您尝试插入的值(这有助于缩小问题范围)的情况下,我会说这是问题的最可能原因,假设您的初始“//”中的列顺序/Columns" 列表是实际的顺序。如果您查看字段的插入顺序,txtRetail.TexttxtQuantity.Text 会切换,因为 table 似乎有 Quantity,然后是 RetailPrice。在 INSERT 中指定字段列表可以消除此问题,即使这不是此处的实际问题。

如果 #4 不是问题,那么您需要调试并逐步查看 txtRetail.TexttxtQuantity.Text 的值,因为它们连接到 [=23= 时存在].