Я настраиваю устаревшее приложение ASP.NET MVC, которое использует как сырой SQL, так и модели.У меня есть некоторые данные для фиксации, которые имеют два десятичных знака, например, 4615,38, 11,51.Когда я пытаюсь зафиксировать данные, я получаю сообщение об ошибке
Ошибка преобразования типа данных varchar в числовой
Мне нужна помощь, как правильно определить таблицу и хранимую процедуру.Должен ли я использовать какое-либо приведение в определении таблицы или LEFT
функцию?
В TaxTableController.cs у меня есть:
Models.TaxTable.Zimra zimra = new Models.TaxTable.Zimra();
zimra.TableName = Helpers.SanitiseInput(Convert.ToString(formcollection["TableName"]));
zimra.TierName = Helpers.SanitiseInput(Convert.ToString(formcollection["TierName"]));
zimra.MinSalary = Convert.ToDouble(formcollection["MinSalary"]);
zimra.MaxSalary = Convert.ToDouble(formcollection["MaxSalary"]);
zimra.CreatedOn = DateTime.Now;
zimra.CreatedBy = Convert.ToString(Session["UserId"]);
if (ModelState.IsValid)
{
using (SqlConnection conn = new SqlConnection(Helpers.DatabaseConnect))
{
SqlCommand cmd = new SqlCommand("SaveZimraTable", conn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@TableName", zimra.TableName);
cmd.Parameters.AddWithValue("@TierName", zimra.TierName);
cmd.Parameters.AddWithValue("@MaxSalary", zimra.MaxSalary);
cmd.Parameters.AddWithValue("@MinSalary", zimra.MinSalary);
cmd.Parameters.AddWithValue("@CreatedBy", zimra.CreatedBy);
cmd.Parameters.AddWithValue("@CreatedOn", zimra.CreatedOn);
Определение моей таблицы такое же, как показано ниже (с использованием Script Table As - Create):
[Id] [int] IDENTITY(1,1) NOT NULL,
[MinSalary] [decimal](18, 2) NOT NULL,
[MaxSalary] [decimal](18, 2) NOT NULL,
[CreatedBy] [varchar](50) NULL,
[TableName] [varchar](50) NULL,
[TierName] [varchar](50) NOT NULL,
[CreatedOn] [datetime] NULL,
CONSTRAINT [PK__Zimra__3214EC07397C51AA] PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
И хранимая процедура выглядит следующим образом:
CREATE PROCEDURE [dbo].[SaveZimraTable]
@TableName varchar(50),
@TierName varchar(50),
@MinSalary decimal(18,2),
@MaxSalary decimal(18,2),
@CreatedBy varchar(50),
@CreatedOn datetime
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
INSERT INTO Zimra VALUES (@TableName,@TierName,@MinSalary,@MaxSalary,@CreatedBy,@CreatedOn)
END
GO