web-dev-qa-db-ja.com

データベース挿入エラー:「文字列またはバイナリデータは切り捨てられます」

ログインすると、セッションにユーザー名が保存されます。私の要件は、自分のデータベースにユーザー名を保存することです。ここでは、それを_username1_に格納しています。ユーザー名を入力すると、response.write()を使用して印刷でき、完全に印刷されます。しかし、それをデータベースに格納すると、次のエラーが発生します。

[。 。** 

以下は私のado.netコードです。

_using (SqlConnection con = 
    new SqlConnection("Data Source=.;database=testdb1;Integrated Security=SSPI")) {

    con.Open();
    //  SqlCommand cmd = new SqlCommand("delete from fileinfo where ID=" + Convert.ToInt32(Request.Params["one"]), con);                            

    string uname = (string) Session["fname"].ToString() + " " + Session["lname"].ToString(); //Session["fname"].ToString()+" "+Session["lname"].ToString();

    // Response.Write(uname);
    // uname = "sri hari";
    uname = uname + " ";
    string uname1 = uname;
    uname = uname.Trim();
    SqlCommand cmd = new SqlCommand("insert into qry_details values('" + txt_query_name.Text + "','pending for approval','" + txt_query_description.Text + "','" + DateTime.Now.ToString("yyyy-MM-dd") + "','" + qry + "','" + uname1 + "')", con);
    cmd.ExecuteScalar();
}
_
13
srihari

qry_detailsテーブルの長さをチェックし、それがデータベースに送信する文字列よりも小さいかどうかを確認しますか?

基本的に例外は、列の長さよりも大きなものをしようとしていることを示しています。

24
Aneef

パラメータ化されたクエリを使用することをお勧めします。これで、コードがSQLインジェクションに対して脆弱になります。また、データベースに値を挿入するときは、SQLコマンドでExecuteNonQueryではなくExecuteScalarメソッドを使用する必要があります。

var connectionString = "Data Source=.;database=testdb1;Integrated Security=SSPI";
using (SqlConnection con = new SqlConnection(connectionString))
using (SqlCommand cmd = con.CreateCommand())
{
    con.Open();
    cmd.CommandText = "INSERT INTO qry_details VALUES (@query_name, 'pending for approval', @query_description, @date, @qry, @username)";
    cmd.Parameters.AddWithValue("@query_name", txt_query_name.Text);
    cmd.Parameters.AddWithValue("@query_description", txt_query_description.Text);
    cmd.Parameters.AddWithValue("@date", DateTime.Now);
    cmd.Parameters.AddWithValue("@qry", qry);
    cmd.Parameters.AddWithValue("@username", uname1);
    cmd.ExecuteNonQuery();
}
9
Darin Dimitrov

このエラーは主に、挿入する値がSQL Serverのテーブルで定義されているフィールド幅より大きい場合に発生します。

DateTime.Now c#関数を使用して日付と時刻を挿入しているかどうかを確認します。テーブルのタイプはDateTimeでなければなりません。日付や時刻のみではありません。

1
Akhtar ali