在 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);
这里有几个问题:
如果 50 个字符对于名称而言太少,您需要将 [ProductName]
字段的数据类型更改为 VARCHAR(50)
或其他数字。但是 text
数据类型在 SQL Server 2005 出现时被弃用,即使您仍在使用 SQL Server 2000,我也非常怀疑您需要超过 8000 个字符的产品名称;- ). TEXT
的替代品是 VARCHAR(MAX)
,当情况实际需要超过 8000 个字符时。
您需要参数化您的查询,因为在当前形式下,您的代码容易受到 SQL 注入。
您无法在 SQL Server Management Studio (SSMS) 中保存小数。您可以保存查询,也可以保存结果,但 SSMS 是 IDE。您的意思可能是您无法使用 .NET 将十进制值保存到 SQL 服务器。
虽然 INSERT 语句不需要,但指定列列表始终是一个好主意,因为列的顺序可能不是您所期望的,如果您添加列,则此 INSERT 将失败.意思是,而不是:
INSERT INTO dbo.NCAProduct VALUES(...);
做:
INSERT INTO dbo.NCAProduct
(ProductCode, ProductName, SupplierCode, Cost, RetailPrice, Quantity)
VALUES(...);
在没有看到您尝试插入的值(这有助于缩小问题范围)的情况下,我会说这是问题的最可能原因,假设您的初始“//”中的列顺序/Columns" 列表是实际的顺序。如果您查看字段的插入顺序,txtRetail.Text
和 txtQuantity.Text
会切换,因为 table 似乎有 Quantity
,然后是 RetailPrice
。在 INSERT 中指定字段列表可以消除此问题,即使这不是此处的实际问题。
如果 #4 不是问题,那么您需要调试并逐步查看 txtRetail.Text
和 txtQuantity.Text
的值,因为它们连接到 [=23= 时存在].
我希望在 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);
这里有几个问题:
如果 50 个字符对于名称而言太少,您需要将
[ProductName]
字段的数据类型更改为VARCHAR(50)
或其他数字。但是text
数据类型在 SQL Server 2005 出现时被弃用,即使您仍在使用 SQL Server 2000,我也非常怀疑您需要超过 8000 个字符的产品名称;- ).TEXT
的替代品是VARCHAR(MAX)
,当情况实际需要超过 8000 个字符时。您需要参数化您的查询,因为在当前形式下,您的代码容易受到 SQL 注入。
您无法在 SQL Server Management Studio (SSMS) 中保存小数。您可以保存查询,也可以保存结果,但 SSMS 是 IDE。您的意思可能是您无法使用 .NET 将十进制值保存到 SQL 服务器。
虽然 INSERT 语句不需要,但指定列列表始终是一个好主意,因为列的顺序可能不是您所期望的,如果您添加列,则此 INSERT 将失败.意思是,而不是:
INSERT INTO dbo.NCAProduct VALUES(...);
做:
INSERT INTO dbo.NCAProduct (ProductCode, ProductName, SupplierCode, Cost, RetailPrice, Quantity) VALUES(...);
在没有看到您尝试插入的值(这有助于缩小问题范围)的情况下,我会说这是问题的最可能原因,假设您的初始“//”中的列顺序/Columns" 列表是实际的顺序。如果您查看字段的插入顺序,
txtRetail.Text
和txtQuantity.Text
会切换,因为 table 似乎有Quantity
,然后是RetailPrice
。在 INSERT 中指定字段列表可以消除此问题,即使这不是此处的实际问题。
如果 #4 不是问题,那么您需要调试并逐步查看 txtRetail.Text
和 txtQuantity.Text
的值,因为它们连接到 [=23= 时存在].