データベース列にsmalldatetimeの値を挿入する方法:私のようなユーザーテーブルから1を持っている
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
です。 me err as:文字列をsmalldatetimeデータ型に変換するときに変換に失敗しました。 –