0

ページを開くたびにSqlCommandに問題があり、エラーが発生します。

System.Data.SqlClient.SqlException: Incorrect syntax near 'Van'.

'Van'はプロジェクト全体とタイトルに1回しか見つからないため、問題を見つけることができません。これは、Page_Loadのコードです。

   using (SqlConnection con = new SqlConnection(RoleEnvironment.GetConfigurationSettingValue("DatabaseConnectionString")))
            {
                var cmd = new SqlCommand("SELECT (SELECT Memo_ID, Dep_Name FROM Department WHERE (Department_ID = Staff.Depar_ID)) AS DepartmentName FROM Staff WHERE (FirstName + SPACE(1) + LastName = " + User.Identity.Name, con);
                cmd.Connection.Open();
                var sqlReader = cmd.ExecuteReader();
                while (sqlReader.Read())
                {

                    String result = sqlReader.GetString(0);
                    DropDownList1.DataBind();
                    DropDownList1.Items.FindByValue(result).Selected = true;
                    //Fill some data like : string result = sqlReader("SomeFieldName");
                }
                sqlReader.Close();
                cmd.Connection.Close();
                cmd.Dispose();
            }

データベース接続文字列は、他のすべてのページで機能するため、正しいです。従業員が勤務している部門を取得して、自分の部門のメモしか表示できないようにしようとしています。

4

3 に答える 3

1

指定された姓の後にある括弧を閉じる必要があります。

SELECT (SELECT Memo_ID, Dep_Name FROM Department 
WHERE (Department_ID = Staff.Depar_ID)) AS DepartmentName 
FROM Staff WHERE (FirstName + SPACE(1) + LastName = 'xxx' )

これがどのように見えるべきかです:

  using (SqlConnection con = new SqlConnection(RoleEnvironment.GetConfigurationSettingValue("DatabaseConnectionString")))
        {
            var cmd = new SqlCommand("SELECT (SELECT Memo_ID, Dep_Name FROM Department WHERE (Department_ID = Staff.Depar_ID)) AS DepartmentName FROM Staff WHERE (FirstName + SPACE(1) + LastName = '" + User.Identity.Name + "')", con);
            cmd.Connection.Open();
            var sqlReader = cmd.ExecuteReader();
            while (sqlReader.Read())
            {

                String result = sqlReader.GetString(0);
                DropDownList1.DataBind();
                DropDownList1.Items.FindByValue(result).Selected = true;
                //Fill some data like : string result = sqlReader("SomeFieldName");
            }
            sqlReader.Close();
            cmd.Connection.Close();
            cmd.Dispose();
于 2012-05-29T12:02:53.380 に答える
0

姓を引用する必要があります。おそらく、パラメーター化されたクエリにも変換する必要があります。

于 2012-05-29T12:01:00.800 に答える
0

私はあなたのWHERE条項User.Identity.Nameが引用符で囲まれていることを期待していました:

WHERE (FirstName + SPACE(1) + LastName = '" + User.Identity.Name + "'" ...

van」をユーザー名に含めることはできますか?

これも非常に安全なクエリではありませんが、SQLインジェクションのもう1つの問題です。

于 2012-05-29T12:02:01.207 に答える