3

私はWebサービス開発に不慣れです。私はc#とmysqlを使用してasp.netでWebサービスを作成しました。

selectクエリの値を変数に格納したいので、テーブルに挿入します。

私は次のコードを使用しました:

//for inserting new game details in the tbl_Game by FB
    [WebMethod]
    public string InsertNewGameDetailsForFB(string gametype, string player1, string player2, string player3, string player4, string player5)
    {
        string success = "Error in Insertion";

        string selectID = "Select UserID from tbl_userinfo where Facebook_ID IN ('" + player1 + "','" + player2 + "','" + player3 + "')";
        con = new MySqlConnection(conString);
        con.Open();
        MySqlCommand cmd = new MySqlCommand(selectID, con);
        MySqlDataReader ids = cmd.ExecuteReader();
        string id1="", id2="", id3="";
        while (ids.Read())
        {
           id1 = ids.GetString(0);
           id2 = ids.GetString(1);
           id3 = ids.GetString(2);

        }

        string insertNewGame = "Insert into tbl_game(Type,Player1,Player2,Player3,Player4,Player5) values";
        insertNewGame += "( '" + gametype + "' , '" + id1 + "', '" + id2 + "','" + id3 + "', '" + player3 + "','" + player4 + "', '" + player5 + "' )";
        con = new MySqlConnection(conString);
        con.Open();
        MySqlCommand cmd1 = new MySqlCommand(insertNewGame, con);
        int success1 = cmd1.ExecuteNonQuery();
        con.Close();

        string gameID = "Select MAX(GameID) from tbl_game";
        con = new MySqlConnection(conString);
        con.Open();
        MySqlCommand cmd2 = new MySqlCommand(gameID, con);
        string gameid = cmd2.ExecuteScalar().ToString();

        if (success1 > 0)
        {
           success="Inserted Successfully, GameID is - " + gameid;
        }
        return success;
    }

これどうやってするの ?

ありがとう。

4

1 に答える 1

2

最初の問題は、最初のクエリからUserIDをどのように読み取ろうとしているのかです。このクエリは3列ではなく、3行を返します。したがって、次のようなことを行う必要があります。

int index = 0;
while (ids.Read())
{
    switch (index)
    {
        case 0:
            id1 = ids.GetString(0);
            break;
        case 1:
            id2 = ids.GetString(0);
            break;
        case 2:
            id3 = ids.GetString(0);
            break;
    }
    index += 1;
}

それはそれらを適切に保存するはずです。2番目の提案は、これはWebサービスであるため、SQLインジェクション攻撃を回避し、動的SQLではなくパラメーター化されたクエリを使用する必要があるということです。Webには、使用できる例がたくさんあります。

私の最後の提案は、IDisposableを実装するオブジェクト(つまり、接続オブジェクト、コマンド、リーダーなど)にusingステートメントを忠実に使用することです。これにより、オブジェクトの適切なクリーンアップが保証されます。

于 2012-05-30T13:16:38.797 に答える