我希望在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);
答案 0 :(得分:1)
这里有几个问题:
如果名称的字符数太少,则需要将[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(...);
如果没有看到您要插入的值(这有助于缩小问题范围),我会说这是问题的最可能原因,假设您的初始“///列”中的列顺序“列表是实际的订单。如果您查看字段的插入顺序,txtRetail.Text
和txtQuantity.Text
会切换,因为表格似乎有Quantity
,然后是RetailPrice
。在INSERT中指定字段列表可以消除此问题,即使这不是实际问题。
如果#4不是问题,则需要调试并逐步查看txtRetail.Text
和txtQuantity.Text
的值,因为它们在连接到SqlCommand
时存在。