【发布时间】:2019-03-31 15:41:29
【问题描述】:
我正在尝试将十进制值上传到数据库中。
在上传之前(在调试 C# 时)它是小数,但是当插入到数据库时它是小数,所以小数点后除了零之外没有任何数字。为什么?
变量声明:
decimal screen_size = 0;
cmd.Parameters.Add(new SqlParameter("@devicename", SqlDbType.NVarChar));
cmd.Parameters.Add(new SqlParameter("@batterylife", SqlDbType.Int));
cmd.Parameters.Add(new SqlParameter("@price", SqlDbType.Int));
cmd.Parameters.Add(new SqlParameter("@BasemarkX", SqlDbType.Int));
cmd.Parameters.Add(new SqlParameter("@ImageURL", SqlDbType.VarChar, int.MaxValue));
cmd.Parameters.Add(new SqlParameter("@year", SqlDbType.Int));
cmd.Parameters.Add(new SqlParameter("@screensize", SqlDbType.Int));
作业:
screen_size = decimal.Parse(Regex.Match(screenSize, @"\d+(\.\d+)?").Value);
上传:
cmd.CommandText =
"UPDATE Phones " +
"SET price = @price, BasemarkX = @BasemarkX, year = @year, batterylife = @batterylife, screensize = @screensize " +
"WHERE devicename = @devicename";
//set parameters values
cmd.Parameters["@devicename"].Value = model;
cmd.Parameters["@batterylife"].Value = batterylife;
cmd.Parameters["@price"].Value = price;
cmd.Parameters["@BasemarkX"].Value = bench;
cmd.Parameters["@year"].Value = year;
cmd.Parameters["@ImageURL"].Value = imgURL;
cmd.Parameters["@screensize"].Value = screen_size;
cmd.ExecuteNonQuery();
数据库:
CREATE TABLE [dbo].[Phones] (
[Id] INT IDENTITY (1, 1) NOT NULL,
[devicename] NVARCHAR (50) NULL,
[batterylife] INT DEFAULT ((0)) NULL,
[price] INT DEFAULT ((0)) NULL,
[BasemarkX] INT DEFAULT ((0)) NULL,
[year] INT DEFAULT ((0)) NULL,
[ImageURL] NVARCHAR (MAX) NULL,
[screensize] DECIMAL (18, 4) DEFAULT ((0)) NULL,
PRIMARY KEY CLUSTERED ([Id] ASC)
);
澄清:我正在尝试上传一个十进制数,通常每个点的每一端都有一个数字,每边最多两个(它不起作用的测试是每端只有一个数字)
【问题讨论】:
-
您能否展示定义命令参数的代码部分?
-
我同意史蒂夫的观点,知道
@screensize参数的类型到cmd会有所帮助 -
@ryanwc 如果我理解正确,
@screensize的类型写在 DB 下: -
请显示您声明 cmd 变量和创建参数的位置的整个代码。上面的代码不足以准确识别问题。我们只能猜猜错了
-
@Steve 知道错误出在哪里