在通过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正在终止
答案 0 :(得分:3)
您的问题与日期无关 它的字符串数据对于列(可能是varchar)来说太大了,您试图将数据插入其中。
我会检查Comment
和txt.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