我希望在 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);
这里有几个问题:
如果 50 个字符对于名称来说太少,您需要将
[ProductName]
字段的数据类型更改为 VARCHAR(50)
或其他数字。但是,当 SQL Server 2005 推出时,text
数据类型已被弃用,即使您仍在使用 SQL Server 2000,我也非常怀疑您的产品名称是否需要超过 8000 个字符;-)。 TEXT
的替代品是 VARCHAR(MAX)
,适用于当情况实际上需要超过 8000 个字符时。您需要参数化您的查询,因为在当前表单中,您的代码很容易受到 SQL 注入。
您无法在 SQL Server Management Studio (SSMS) 中保存小数。您可以保存查询,也可以保存结果,但 SSMS 是一个 IDE。您可能的意思是您无法使用 .NET 将十进制值保存到 SQL Server。
虽然 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
时存在。