0

これに対する答えを探しましたが、実際に役立つものは見つかりませんでした。テーブルにデータを書き込むストアド プロシージャがあります。挿入には DateTime フィールドが含まれますが、入力されるデータによっては、このフィールドが空になる場合があります。私のクラシック ASP ページのコードは次のようになります。

If Request.Form("Status") = "Closed" Then
Status = "Closed"
DateClosed = Now()

Else

Status = "OPEN"
DateClosed = NULL

End If

SP_AddToTable = "MyTable '" & Status & "', '" & DateClosed & "'"

Set SQLQuery = objConn.Execute(SP_AddToTable)

ストアド プロシージャは次のようになります。

USE [MyDatabase]
GO
/****** Object:  StoredProcedure [dbo].[SP_AddToTable] Script Date: 04/30/2013         10:00:10 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE [dbo].[SP_AddToTable] 

@Status varchar(20),
@DateClosed datetime

AS

INSERT INTO MyTable (
[Status],
DateClosed,
)

VALUES (
@Status,
@DateClosed)

実際の日付値を渡すと正常に動作しますが、NULL 値が渡された場合、または DateClosed フィールドにデータを渡さなかった場合、フィールドのデフォルトは 1900 年 1 月 1 日になります。私の ASP コード、またはストアド プロシージャで) テーブルの DateClosed フィールドを空のままにしますか?

私はストアド プロシージャにまったく慣れていないので、初心者のエラーはご容赦ください。:)

ありがとう。

4

1 に答える 1

1

まず、パラメータ化されたクエリを使用して sp を呼び出すように ASP コードを変更する必要があります。上記のクエリは SQL インジェクションに対して非常に脆弱です。

Set cmd = Server.CreateObject("ADODB.Command")
cmd.ActiveConnection = objConn
cmd.CommandText = "SP_AddToTable"
cmd.CommandType = adCmdStoredProc
cmd.Parameters.Refresh

cmd.Parameters(1) = Status 
cmd.Parameters(2) = DateClosed 
cmd.Execute

これにより、値「NULL」を(一重引用符で)挿入する前と同様に、nullの問題も修正されるはずです。

于 2013-04-30T14:27:33.190 に答える