使用C#在文本框值为null时停止在表中插入Null值日期

时间:2017-03-16 15:14:37

标签: c# asp.net sql-server

我正在尝试停止默认值日期" 01/01/1900"当文本框的值为空时输入表格。我不需要在表格上进行验证null文本框没问题 感谢

using (SqlConnection con = new SqlConnection(WebConfigurationManager
       .ConnectionStrings["Molecular"].ConnectionString))
{
   con.Open();

   using (SqlCommand sc = new SqlCommand(@"Insert into ClinicalFollowUp  (MBID, Diagnosis, 
          DateLastSeen, DateofDeath ) values(@MBID, Upper(@Diagnosis), 
          Convert (date, @DateLastSeen , 103), Convert (date, @DODeath, 103);", con))
   {
      sc.Parameters.AddWithValue("@MBID", txtMBID1.Text);
      sc.Parameters.AddWithValue("@Diagnosis", txtDiagnosis.Text);

      // Date  Textbox
      sc.Parameters.AddWithValue("@DateLastSeen", txtDateLastSeen.Text);

      // Date  Textbox
      sc.Parameters.AddWithValue("@DODeath", txtDateDeath.Text);
   }
   con.close();
}

3 个答案:

答案 0 :(得分:2)

我个人这样做。

static public object ToDbNullableDate(this string s)
{
    DateTime d;
    var ok = DateTime.TryParse(s, out d);
    return ok ? d : DbNull.Value;
}

然后在你的代码中:

sc.Parameters.AddWithValue("@DateLastSeen", txtDateLastSeen.Text.ToDbNullableDate());

答案 1 :(得分:1)

尝试这样:

if (string.IsNullOrWhiteSpace(txtDateLastSeen.Text)
{
    sc.Parameters.AddWithValue("@DateLastSeen", DbNull.Value);
}
else
{
    sc.Parameters.AddWithValue("@DateLastSeen", txtDateLastSeen.Text);
}

编辑:IsNullOrWhiteSpace,如建议的那样,有点简单。

答案 2 :(得分:1)

  1. 您应该使用命令发送参数
    • 正确的数据类型(不作为字符串,不要在Sql Server中转换它们!)
    • 指定参数的数据类型
    • 在适当的位置指定参数数据类型的长度。我猜测了模式中的字符串长度,相应地更新它。
  2. 在您的调用堆栈中尽早执行转换。理想情况下,你有一个日期时间选择器的控件,也许这可以为你做转换或者如果它是一个web api然后让序列化器将请求反序列化为适当的类型。

    const string sqlStatement = @"插入ClinicalFollowUp(MBID,Diagnosis,DateLastSeen,DateofDeath)   价值观(@MBID,@ Diagnosis,@ DateLastSeen,@ DODeath);"

    using(SqlConnection con = new SqlConnection(WebConfigurationManager.ConnectionStrings [" Molecular"]。ConnectionString)) 使用(SqlCommand sc = new SqlCommand(,con)) {     con.Open();     sc.Parameters.Add(new SqlParameter(" @ MBID",SqlDbType.VarChar,100){Value = txtMBID1.Text});     sc.Parameters.Add(new SqlParameter(" @ Diagnosis",SqlDbType.VarChar,2000){Value = txtDiagnosis.Text.ToUpper()});

    // Date  Textbox
    sc.Parameters.Add(new SqlParameter("@DateLastSeen", SqlDbType.DateTime){Value = getSqlDate(txtDateLastSeen.Text)});
    
    // Date  Textbox
    sc.Parameters.Add(new SqlParameter("@DODeath", SqlDbType.DateTime){Value = getSqlDate(txtDateDeath.Text)});
    
    
    sc.ExecuteNonQuery();
    

    }

    //待办事项 - 验证文化信息 public static object getSqlDate(string dateTime) {     DateTime dt;     return!string.IsNullOrEmpty(dateTime)&& DateTime.TryParse(dateTime,CultureInfo.InvariantCulture,DateTimeStyles.None,out dt)         ? (对象)dt         :( object)System.DBNull.Value; }