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)には文字列データが大きすぎます。

Commentandの長さを確認txt.Textし、データを挿入できることを確認します。

にはSQLタイプdatetimeを使用してくださいDateTime。テキスト列に日付を格納すると、多くの問題が発生します。

  • より多くのストレージスペースが必要です。
  • そのデータを検索するのは非常に困難です。
  • タイムゾーンを変更することはできません。
于 2012-08-26T11:34:42.657 に答える
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 に答える
1

これは、データベーステーブルの日付列またはその他の列 (varchar() を想定) に指定したフィールドのデータ型が、挿入しようとしているサイズよりも小さいことを意味します。割り当てたサイズを大きくする

于 2012-08-26T11:35:25.357 に答える