【问题标题】:Error While inserting date in asp.net在 asp.net 中插入日期时出错
【发布时间】:2012-08-26 11:32:20
【问题描述】:

通过 asp.net 将日期插入 SQL Server 2008 时发生错误。

插入语句

Insert into comment(CommentFrom, CommentTo, Comment, Cmntonscrap, Cmnttime) 
Values('" + Session["UserName"] + "','" + email.Text.ToString() + "','"  + 
       txt.Text.ToString().Trim() + "','" + cscrap.Text.ToString().Trim()  + 
       "','" + DateTime.Now.ToString().Trim() + "')";

错误:

字符串或二进制数据将被截断,语句正在终止

【问题讨论】:

标签: c# asp.net sql-server-2008 ado.net


【解决方案1】:

您的问题不在于日期。
它的字符串数据对于您尝试插入数据的列(可能是 varchar)来说太大了。

我会检查您的Commenttxt.Text 的长度,看看是否可以插入数据。

为您的DateTime 使用sql 类型datetime。在文本列中存储日期是inviting a lot of trouble

  • 需要更多存储空间。
  • 搜索这些数据将非常困难。
  • 您将永远无法更改时区。

【讨论】:

  • 是它的 varchar,但以前它刚刚插入到其他表中,它正在产生问题
  • 您插入的数据大小将不一样。对这样的数据使用列类型 Textnvarchar(MAX)。如果您设置了限制,请使用 TextBox MaxLength 属性以确保您不允许插入过大的数据。
  • YAa 但它只是在不包括运行日期的日期创建问题
  • 编辑了我的答案。从不将日期存储在文本中。
  • 现在错误是从字符串转换日期和/或时间时转换失败。
【解决方案2】:

这意味着您为数据库表中的日期列或任何其他列(假设为 varchar())提供的字段的数据类型小于您尝试插入的大小。增加您分配的尺寸

【讨论】:

  • @jenes 您为声明为 varchar() 的列分配了多少大小?
  • "20" 表示日期,但在其他表中声明了相同的大小,它们没有造成任何问题
  • 您确定两个表中指定的数据类型、大小相同吗?
  • 我现在试过了。时间和日期正确保存在表中,列为 varchar(20)。所以我猜你的问题不在于日期列,而是其他列。尝试使用更多大小的 varchar() 增加所有其他列
  • 重新创建您的表。错误是否还专门指向日期和时间属性?我认为不是!
【解决方案3】:

连接 sql 语句是一种不好的方法(安全问题),您的数据库将很容易成为 Sql 注入的目标。

我建议您使用存储过程来添加或修改您想要的数据,并使用 SqlParameters 从用户界面发送输入。

可能会有所帮助:How to create stored procedure

这是一个代码示例,向您展示如何使用 C# 调用带参数的存储过程

//The method that call the stored procedure
public void AddComment()
{
    using(var connection = new SqlConnection("ConnectionString"))
    {
        connection.Open();
        using(var cmd = new SqlCommand("storedProcedure_Name", connection) { CommandType = CommandType.StoredProcedure })
        {
            cmd.Parameters.AddWithValue("@CommentFrom", commandFrom);
            cmd.Parameters.AddWithValue("@CommentTo", commentTo);
            //...And  so on

            cmd.ExecuteNonQuery();
        }
    }
}

如何创建存储过程的示例

CREATE PROCEDURE storedProcedure_Name
    -- Add the parameters for the stored procedure here
    @CommentFrom nvarchar(255) = NULL,
    @CommentTo nvarchar(255) = NULL
AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;

    -- Insert statements for procedure here
    INSERT INTO Comments (CommentFrom, CommentTo) VALUES(@CommentFrom, @CommentTo)
END
GO

【讨论】:

  • 虽然这是很好的信息。无论如何它都没有解决这个问题。
  • 它没有回答我的问题
  • 不客气,如果您继续使用您的方法,我建议您使用 String.Format() 这样代码将......格式正确。祝你好运
  • 检查输入错误。它是SqlCommand 而不是SqlCommane
猜你喜欢
  • 2015-03-17
  • 1970-01-01
  • 2015-08-23
  • 1970-01-01
  • 2022-11-17
  • 1970-01-01
  • 1970-01-01
  • 2013-07-26
  • 1970-01-01
相关资源
最近更新 更多