我有一個從用戶表所示:如何插入SMALLDATETIME值數據的基礎上柱
Id int Unchecked
Name varchar(50) Checked
EmailAddress varchar(200) Unchecked
Host varchar(250) Unchecked
Port int Unchecked
POPHost varchar(250) Checked
POPPort int Checked
Password varchar(50) Unchecked
CreatedDate smalldatetime Unchecked
user_id int Unchecked
EnableSSL bit Unchecked
Count int Unchecked
SentDateTime smalldatetime Checked
MaxCount int Checked
,這是存儲進程內爲每個選擇更新特定字段作爲像:
USE [EASYMAIL]
GO
/****** Object: StoredProcedure [dbo].[UpdateFromUserField] Script Date: 20/02/2017 8:35:24 PM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[UpdateFromUserField]
(
@fromuser_id int,
@var_name varchar(25),
@var_value varchar(100)
)
AS
BEGIN
SET NOCOUNT ON;
IF @var_name = 'Name'
UPDATE [dbo].[tbl_From_master] SET [Name] =CAST(@var_value AS TEXT) WHERE ([email protected]_id)
ELSE IF @var_name = 'EmailAddress'
UPDATE [dbo].[tbl_From_master] SET [EmailAddress] = CAST(@var_value AS TEXT) WHERE ([email protected]_id)
ELSE IF @var_name = 'Host'
UPDATE [EASYMAIL].[dbo].[tbl_From_master] SET [Host] = CAST(@var_value AS TEXT) WHERE ([email protected]_id)
ELSE IF @var_name = 'Port'
UPDATE [EASYMAIL].[dbo].[tbl_From_master] SET [Port] = CAST(@var_value AS INT) WHERE (Id = @fromuser_id)
ELSE IF @var_name = 'POPHost'
UPDATE [EASYMAIL].[dbo].[tbl_From_master] SET [POPHost] = CAST(@var_value AS TEXT) WHERE ([email protected]_id)
ELSE IF @var_name = 'POPPort'
UPDATE [EASYMAIL].[dbo].[tbl_From_master] SET [POPPort] = CAST(@var_value AS INT) WHERE (Id = @fromuser_id)
ELSE IF @var_name = 'EnableSSL'
UPDATE [EASYMAIL].[dbo].[tbl_From_master] SET [EnableSSL] = CAST(@var_value AS BIT) WHERE (Id = @fromuser_id)
ELSE IF @var_name = 'SentDateTime'
UPDATE [EASYMAIL].[dbo].[tbl_From_master] SET [SentDateTime] = SUBSTRING(@var_value,4,3) + LEFT(@var_value,3) + RIGHT(@var_value,4) WHERE (Id = @fromuser_id)
ELSE IF @var_name = 'Count'
UPDATE [EASYMAIL].[dbo].[tbl_From_master] SET [Count] = CAST (@var_value AS INT) WHERE ([email protected]_id)
ELSE IF @var_name = 'MaxCount'
UPDATE [EASYMAIL].[dbo].[tbl_From_master] SET [MaxCount] = CAST (@var_value AS INT) WHERE ([email protected]_id)
END
然而,它變得對執行時間如下錯誤:
USE [EASYMAIL]
GO
DECLARE @return_value int
EXEC @return_value = [dbo].[UpdateFromUserField]
@fromuser_id = 1,
@var_name = N'SentDateTime',
@var_value = N'2017-02-20 8:32:12'
SELECT 'Return Value' = @return_value
GO
錯誤:
Msg 295, Level 16, State 3, Procedure UpdateFromUserField, Line 26
Conversion failed when converting a character string to smalldatetime data type.
這裏有什麼錯誤? 請幫我
更新
The conversion of a varchar data type to a smalldatetime data type resulted in an out-of-range value.
The statement has been terminated.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.Data.SqlClient.SqlException: The conversion of a varchar data type to a smalldatetime data type resulted in an out-of-range value.
The statement has been terminated.
Source Error:
Line 618: public int UpdateFromUserField([global::System.Data.Linq.Mapping.ParameterAttribute(DbType="Int")] System.Nullable<int> fromuser_id, [global::System.Data.Linq.Mapping.ParameterAttribute(DbType="VarChar(25)")] string var_name, [global::System.Data.Linq.Mapping.ParameterAttribute(DbType="VarChar(100)")] string var_value)
Line 619: {
Line 620: IExecuteResult result = this.ExecuteMethodCall(this, ((MethodInfo)(MethodInfo.GetCurrentMethod())), fromuser_id, var_name, var_value);
Line 621: return ((int)(result.ReturnValue));
Line 622: }
Source File: e:\EASYMAIL_off\EASYMAIL\App_Code\DataClasses.designer.cs Line: 620
這似乎是您設置日期的唯一地方是:SET [SentDateTime] = SUBSTRING(@ var_value,4,3)+ LEFT(@ var_value,3)+ RIGHT(@ var_value,4)' – McNets
我錯誤如下:將字符串轉換爲smalldatetime數據類型時轉換失敗。 –