13

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

**sqlException はユーザー コードによって処理されませんでした
cmd.ExecuteScalar(); での例外。
文字列型やバイナリは省略されます。
ステートメントは終了されました。**

以下は私の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();
}
4

3 に答える 3

26

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

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

于 2013-06-26T06:04:07.390 に答える
10

パラメータ化されたクエリを使用することをお勧めします。コードが SQL インジェクションに対して脆弱になりました。また、データベースに値を挿入するときExecuteNonQueryではなく、SQL コマンドでメソッドを使用する必要があります。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();
}
于 2013-06-26T06:04:04.420 に答える
1

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

DateTime.Now c# 関数を使用して日付と時刻を挿入しているかどうかを確認します。テーブルは DateTime 型である必要があります。日付または時刻だけではありません。

于 2016-09-17T09:58:30.203 に答える