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

时间:2015-01-27 19:51:36

标签: sql sql-server decimal ssms

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

1 个答案:

答案 0 :(得分:1)

这里有几个问题:

  1. 如果名称的字符数太少,则需要将[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(...);
    

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

  5. 如果#4不是问题,则需要调试并逐步查看txtRetail.TexttxtQuantity.Text的值,因为它们在连接到SqlCommand时存在。