在asp.net中插入日期时出错

时间:2012-08-26 11:32:20

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

在通过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() + "')";

错误:

  

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

3 个答案:

答案 0 :(得分:3)

您的问题与日期无关 它的字符串数据对于列(可能是varchar)来说太大了,您试图将数据插入其中。

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

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

  • 需要更多存储空间。
  • 搜索这些数据真的很困难。
  • 你永远无法改变时区。

答案 1 :(得分:1)

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

答案 2 :(得分:1)

判断sql语句是一个糟糕的approch (安全问题),您的数据库将是 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