2017-02-20 4 views
0

データベース列に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 
+0

あなたが日付を設定するのは、SET [SentDateTime] = SUBSTRING(@ var_value、4,3)+ LEFT(@ var_value、3)+ RIGHT(@ var_value、4) ' – McNets

+0

です。 me err as:文字列をsmalldatetimeデータ型に変換するときに変換に失敗しました。 –

答えて

1

変更更新私を助けてくださいすることにより

SET [SentDateTime] = SUBSTRING(@var_value,4,3) + LEFT(@var_value,3) + RIGHT(@var_value,4) 

を:

SET [SentDateTime] = CAST(LEFT(@var_value,4) + SUBSTRING(@var_value,6,2) + SUBSTRING(@var_value,9,2)) AS SMALLDATETIME) 

または:

SET [SentDateTime] = CAST(@var_vaule AS SMALLDATETIME) 
+0

それは私のようなエラーが表示されます:varcharデータ型のsmalldatetimeデータ型への変換は、範囲外の値になります。 ステートメントが終了しました。 –

+0

ya私はそれを....試してみましょう –

+0

私はこの方法をこのように呼ぶことができます: 'db.UpdateFromUserField(fromuserid、 "SentDateTime"、DateTime.Now.Date.ToString());' –

関連する問題