0

データベースからエントリを 1 つだけ選択しようとしています。現在、xml ドキュメント オブジェクトを返していますが、その理由がわかりません。少なくとも、それは私のjavascriptが私に言っていることです。userName="this user" の gameRequestUser の名前である文字列を返したい

          try {
            SqlConnection conn = new SqlConnection(@"Data asdfasdf;database=asdfsdfdf;User id=asdfasdfasdfPassword=asdfasdf;");

            SqlCommand getRequest = new SqlCommand("SELECT gameRequestUser FROM UserData Where userName='" + Session["userName"].ToString() + "'", conn);

            conn.Open();

            SqlDataReader reader = getRequest.ExecuteReader();

            while (reader.Read()) {
                user = reader.GetValue(0).ToString().Trim();
            }

            conn.Close();

            return user;
        } catch (Exception e) { return e.Message.ToString(); }
4

4 に答える 4

3

ExecuteScalarの代わりに使用する必要がありますExecuteReader

user = (string)getRequest.ExecuteScalar();

また、SQL Server Management Studio を使用してクエリ結果を確認する前に、そこでクエリを実行し、結果が問題ないかどうかを確認してください。

于 2012-05-26T21:51:28.820 に答える
2

常にパラメータを使用し、あまりにも多くの問題(文字列引用符、SQLインジェクションなど)を回避します

using(SqlConnection conn = new SqlConnection("yourconnectionstring"))
{
    SqlCommand getRequest = new SqlCommand("SELECT gameRequestUser FROM UserData Where " + 
                                           "userName=@user", conn); 
    conn.Open(); 
    getRequest.Parameters.AddWithValue("@user",Session["userName"].ToString()) 
    SqlDataReader reader = getRequest.ExecuteReader(); 
    while (reader.Read()) { 
        user = reader.GetValue(0).ToString().Trim(); 
    } 
}
于 2012-05-26T21:58:17.983 に答える
1

すべきことの 1 つは、SQL Server Management Studio に移動し、そこでクエリを直接実行してみることです。

SELECT gameRequestUser FROM UserData Where userName='this user'

そうは言っても、覚えておくべきもう1つのことは、次のようなことを行うことで、SQLに最大1行を返すように指示できることです。

SELECT top 1 gameRequestUser FROM UserData Where userName='this user'

これが役立つことを願っています!

于 2012-05-26T21:47:04.337 に答える
1
  1. SELECT TOP 1 ... クエリを使用する

    UserData WHERE から上位 1 つの gameRequestUser を選択 ...

  2. 必要なフィールド値は 1 つだけなので、ExecuteReader() の代わりに SqlCommand の ExecuteScalar() メソッドを使用します。

    SqlCommand getRequest = new SqlCommand(....);
    ...
    string user = Convert.ToString(cmd.ExecuteScalar());

于 2012-05-26T21:54:36.173 に答える