0

こんにちは私はSQLにいくつかのデータを保存するメソッドを持っていますが、すべてのパラメータが設定されているわけではない場合があります。これにより、NULLのために例外が発生します。

これが私の方法です:

 public string getBookingURL(string guid, BookingRequest request, string token, out string exitURL)
    {

        if (validateToken(token))
        {
            string command = "INSERT INTO OUTLOOKADDIN (GUID, TOKEN, BOOKINGID, STARTUTC, ENDUTC, SUBJECT, NUMPARTICIPANTS) VALUES (@GUID, @TOKEN, @BOOKINGID, @STARTUTC, @ENDUTC, @SUBJECT, @NUMPARTICIPANTS)";
            SqlConnection connection = new SqlConnection(GetConnectionString());
            connection.Open();
            try
            {
                SqlCommand cmd = new SqlCommand(command, connection);
                cmd.Parameters.Add("@GUID", guid);
                cmd.Parameters.Add("@TOKEN", token);
                cmd.Parameters.Add("@BOOKINGID", request.bookingID);
                cmd.Parameters.Add("@STARTUTC", request.startUTC);
                cmd.Parameters.Add("@ENDUTC", request.endUTC);
                cmd.Parameters.Add("@SUBJECT", request.subject);
                cmd.Parameters.Add("@NUMPARTICIPANTS", request.numParticipants);
                cmd.ExecuteNonQuery();
                cmd.Parameters.Clear();
                cmd.Dispose();
                cmd = null;
            }

            catch (Exception ex)
            {
                log.Error(ex.Message + "\n\rStackTrace:\n\r" + ex.StackTrace);
            }
            finally
            {
                connection.Close();
            }

            HttpContext current = HttpContext.Current;
            string baseUrl = current.Request.Url.Scheme + "://"
                + current.Request.Url.Authority
                + current.Request.ApplicationPath.TrimEnd('/');

            exitURL = baseUrl + "/index.html";
            return baseUrl + '/'
                + "WebPage/Booking/BBooking.aspx?"
                + "OPS"
                + guid; ;

        }
        exitURL = null;
        return null;
    }

このSQLクエリは...

string command = "INSERT INTO OUTLOOKADDIN(GUID、TOKEN、BOOKINGID、STARTUTC、ENDUTC、SUBJECT、NUMPARTICIPANTS)VALUES(@GUID、@TOKEN、@BOOKINGID、@STARTUTC、@ENDUTC、@SUBJECT、@NUMPARTICIPANTS)";

...動的に実行する必要がありますか、それとも空のときにパラメータを追加できないようにする他の解決策はありますか?

4

3 に答える 3

2

vigneshの投稿に加えてDBNull.Value、DBフィールドがnull許容の場合は、null値に使用します。

編集:メソッドに到達する前に、値を確認することをお勧めしますgetBookingURL()。このポイントに到達する前に適切な検証を行うと、問題全体を完全に回避できます。

if (/* date is null or not valid */)
    cmd.Parameters.Add("@mydate", SqlDbType.DateTime).Value = DBNull.Value;
else
    cmd.Parameters.Add("@mydate", SqlDbType.DateTime).Value = myDate;
于 2013-02-22T06:57:13.417 に答える
1

フロントエンドに検証を追加して、空の値を防ぐことができます

また

パラメータを追加する前にnull値を確認できます

if(value!=null)
{
cmd.Parameters.Add("@GUID", guid);
} 
else
{
cmd.Parameters.Add("@GUID", "somestring or value");
} 
于 2013-02-22T06:52:53.773 に答える
0

dbテーブルのフィールドが検出できない場合は、フロントエンドの値を検証し、ユーザーに警告を表示する必要があります。

列がNULL可能である場合は、DBNullをデータベースに送信でき、例外はスローされません。それに対する私の解決策:

cmd.Parameters.AddWithValue("@ParameterName",
            (a == null) ? (object)DBNull.Value : a);
于 2013-02-22T07:00:23.900 に答える