簡體   English   中英

在asp.net中插入日期時出錯

[英]Error While inserting date in asp.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() + "')";

錯誤:

字符串或二進制數據將被截斷,語句終止

您的問題不在於日期。
它的字符串數據對於列(可能是varchar)太大,您試圖將數據插入其中。

我將檢查您的Commenttxt.Text的長度,並txt.Text可以插入數據。

使用SQL類型datetime作為DateTime 在文本列中存儲日期會帶來很多麻煩

  • 它需要更多的存儲空間。
  • 搜索這些數據確實非常困難。
  • 您將永遠無法更改時區。

這意味着您為數據庫表中的date列或任何其他列(假設varchar())指定的字段的數據類型小於您嘗試插入的大小。 增加您分配的大小

合並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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM