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) 值 (@GUID, @TOKEN, @BOOKINGID, @STARTUTC, @ENDUTC, @SUBJECT, @NUMPARTICIPANTS)";

...应该动态运行还是有任何其他解决方案可以防止在参数为空时添加参数?

4

3 回答 3

2

除了vignesh的帖子DBNull.Value,如果 DB 字段可以为空,则用于空值。

编辑:在您使用您的方法之前检查这些值可能会更好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

您可以在前端添加验证以防止空值

或者

您可以在添加参数之前检查空值

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

如果您在 db 表中的字段不可为,您必须在前端验证这些值并向用户显示警告。

如果列可以为空,您可以将 DBNull 发送到数据库,它不会抛出异常。我的解决方案:

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