1

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

错误:

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

4

3 回答 3

3

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

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

datetime您的DateTime. 在文本列中存储日期会带来很多麻烦

  • 它需要更多的存储空间。
  • 搜索这些数据将非常困难。
  • 您将永远无法更改时区。
于 2012-08-26T11:34:42.657 回答
1

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

于 2012-08-26T11:35:25.357 回答
1

连接 sql 语句是一个坏方法(安全问题),您的数据库将成为Sql 注入的简单目标。

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

可能有所帮助:如何创建存储过程

这是一个代码示例,向您展示如何使用 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
于 2012-08-26T11:46:49.997 回答