Я с трудом пытаюсь выяснить, какой тип данных я бы использовал в C # для ввода данных в мою таблицу в моей базе данных, которая содержит десятичное число (5,2). Когда я попытался использовать десятичный тип данных C #, он сказал, что произошла ошибка при преобразовании числового значения в десятичное. Когда я попробовал строку, он сказал, что не может конвертировать nvarchar в десятичную. Когда я попытался использовать float ... Произошло то же самое, за исключением того, что "реальный" тип данных был дубль тоже не сработал.
У меня есть хранимая процедура, которая вводит данные в мою таблицу, но перед тем, как я выполню типы данных в моей хранимой процедуре и приведу их к фактическому десятичному числу, есть ли другой способ, которым я могу вместо этого преобразовать тип данных ac #, чтобы он соответствовал мое десятичное (5,2) поле?
private void btnAddClientComputer_Click(object sender, EventArgs e)
{
SQLCommands comm = new SQLCommands();
try
{
comm.AddClientComputer(int.Parse(cbCustomerID.Text), cbAction.Text, decimal.Parse(tbCost.Text));
}
catch (FormatException)
{
MessageBox.Show("The cost you have entered is invalid. Please ensure the cost is above 0, and is an actual number", "Invalid Input at Cost", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
}
}
...
public void AddClientComputer(int CustomerID, string Action, decimal Cost)
{
try
{
comm = new SqlCommand("UspAddClientComputer", conn); // Stored Procedure - see sql file
comm.Parameters.AddWithValue("@CustomerID", CustomerID);
comm.Parameters.AddWithValue("@Action", Action);
comm.Parameters.AddWithValue("@Cost", Cost);
comm.CommandType = CommandType.StoredProcedure;
comm.ExecuteNonQuery();
}
catch (Exception ex)
{
System.Windows.Forms.MessageBox.Show(ex.Message, "Error", System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Error);
}
}
...
CREATE TABLE ClientComputers
(ClientComputerID int Identity(1,1) primary key clustered
,CustomerID int
,Action varchar(7) check (Action = 'Upgrade' OR Action = 'Store')
,Cost decimal(5,2) check (Cost > 0)
,Constraint FKCustomerComputer FOREIGN KEY (CustomerID) REFERENCES Customers(CustomerID));
Go
...
CREATE PROCEDURE uspAddClientComputer @CustomerID int, @Action varchar(7), @Cost decimal(5,2)
AS
BEGIN TRY
BEGIN TRANSACTION TrnAddClientComputer;
INSERT INTO [TCTdb].[dbo].[ClientComputers]
([CustomerID]
,[Action]
,[Cost])
VALUES
(@CustomerID
,@Action
,@Cost)
COMMIT TRANSACTION TrnAddClientComputer;
END TRY
BEGIN CATCH
ROLLBACK TRANSACTION TrnAddClientComputer;
DECLARE @ErrorMessage NVARCHAR(4000);
DECLARE @ErrorSeverity INT;
DECLARE @ErrorState INT;
SELECT
@ErrorMessage = ERROR_MESSAGE(),
@ErrorSeverity = ERROR_SEVERITY(),
@ErrorState = ERROR_STATE();
RAISERROR (@ErrorMessage,
@ErrorSeverity,
@ErrorState
);
END CATCH
GO