【问题标题】:Saving Date string to SQL Server date type column in asp.net (vb.net)将日期字符串保存到 asp.net (vb.net) 中的 SQL Server 日期类型列
【发布时间】:2014-08-03 16:13:29
【问题描述】:

我是 vb.net 和 asp.net 的初学者。我在保存日期时遇到问题,这是来自 DevExpress datepicker 控件的字符串值。

列名是expiryDate,类型是date

这是我的 ASPX 标记:

<tr>
    <td nowrap="nowrap" class="label" align="right" valign="top" style="width: 10%">
        Expiry Date
    </td>
    <td style="width: 40%" valign="top">
        <dxe:ASPxDateEdit ID="expiryDate" 
                          runat="server" 
                          EditFormat="Date" 
                          Date="13/06/2014" 
                          Width="200">
        </dxe:ASPxDateEdit>
    </td>
</tr>

在后面的 C# 代码中:

sqlSave = "INSERT INTO [Product] (Title, expiryDate) VALUES ("
          sqlSave += " '" & txtProductName.Text.Trim().Replace("'", "''") & "', "
          sqlSave += ""   & expiryDate.Text & " )"

我使用expiryDate.Text 保存在数据库中,但保存的日期是:1900-01-01,有时我收到消息Operand type clash: int is incompatible with date

我不知道如何解决这个问题,请帮忙?

【问题讨论】:

标签: asp.net vb.net


【解决方案1】:

这样试试,

sqlSave = "INSERT INTO [Product] (Title, expiryDate) VALUES ("
                sqlSave += " '" & txtProductName.Text.Trim().Replace("'", "''") & "', "
                sqlSave += "'" & Convert.ToDateTime(expiryDate.Text).ToString("yyyy-MM-dd") & "' )"

但是,我建议您使用参数化查询而不是简单的串联字符串。

cmd.CommandText = "INSERT INTO [Product] (Title, expiryDate) VALUES (@Title,@expiryDate)";

cmd.Parameters.Add("@Title", SqlDbType.VarChar).Value = txtProductName.Text.Trim().Replace("'", "''");
cmd.Parameters.Add("@expiryDate", SqlDbType.DateTime).Value = Convert.ToDateTime(expiryDate.Text);

【讨论】:

  • 那么该列的类型是数据库中的“日期”,而不是“日期时间”
  • 为什么将字符串转换为日期然后再转换回字符串只是为了将其插入数据库中的日期列?为什么不直接使用 Date 参数插入日期?
  • 你读过这个问题中的所有 cmets @ChrisDunaway。我已经建议并赞成 onskee 的评论。
【解决方案2】:

替换

" & expiryDate.Text & "

'" & expiryDate.Text & "'

【讨论】:

  • 当日期格式为01/06/2014时会发生什么?
  • sql数据库中保存datetime类型数据的规则。应该用两个引号括起来,例如'MM-dd-yyyy'
  • 不,我不是在谈论规则。如果日期格式是“dd/MM/yyyy”或“MM/dd/yyyy”,那么它会产生问题。默认情况下,sql 格式为“yyyy-MM-dd”。因此,要么我们必须以“yyyy-MM-dd”格式传递日期,要么我们必须使用 SET DATEFORMAT 'DMY' 更改 sql 日期格式。
  • 不,最好不要使用字符串连接。相反,使用参数并直接指定日期作为日期时间变量。这样您就不必担心字符串转换。
猜你喜欢
  • 1970-01-01
  • 2013-03-17
  • 1970-01-01
  • 2023-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-19
相关资源
最近更新 更多