1

以下のクエリは HeidiSQL で機能しますが、C# で使用しようとするとエラーが発生します。

SELECT title.id,title.title,title.production_year,movie_info.info FROM title NATURAL JOIN movie_info WHERE title.id <= 1000;

それは私に次のことを教えてくれます:

エラー

次のコードを使用してMySqlDataReaderオブジェクトを取得します。

public override MySqlDataReader Retrieve(string sql)
{
    MySqlCommand cmd = new MySqlCommand(sql, GetConnection());
    return cmd.ExecuteReader();
}

メインメソッドから呼び出します:

static void Main(string[] args)
{
    MySQLFacade facade = new MySQLFacade("127.0.0.1", "omitted", "omitted", "imdb");
    MySqlDataReader reader = facade.Retrieve(
        "SELECT title.id,title.title,title.production_year,movie_info.info" +
        "FROM title " +
        "NATURAL JOIN movie_info" +
        " WHERE title.id <= 1000;");
    using (reader)
    {
        while (reader.Read())
        {
            for (int i = 0; i < reader.FieldCount; i++)
            {
                Console.WriteLine(reader.GetValue(i));
            }
            Console.WriteLine();
        }
    }
    Console.ReadLine();
}

データベース マネージャーと比較して、C# で使用するために SQL 文字列をフォーマットすることについて何か不足している可能性がありますか?

4

2 に答える 2

2

の前にスペースがありませんFROM:

MySqlDataReader reader = facade.Retrieve(
 "SELECT title.id,title.title,title.production_year,movie_info.info" + // <-- here
 "FROM title " +
 "NATURAL JOIN movie_info" +
 " WHERE title.id <= 1000;");

あなたの答えでは、すべてを 1 行にまとめ、不足しているスペースを追加しました。

于 2015-03-29T20:42:16.620 に答える
0

@ を複数行に使用することをお勧めします。 SQL インジェクションを避けるために、常にパラメーターを使用することをお勧めします。

static void Main(string[] args)
{
    MySQLFacade facade = new MySQLFacade("127.0.0.1", "omitted", "omitted", "imdb");
    MySqlDataReader reader = facade.Retrieve(
        @"SELECT title.id,title.title,title.production_year,movie_info.info
        FROM title
        NATURAL JOIN movie_info
        WHERE title.id <= 1000");
    using (reader)
    {
        while (reader.Read())
        {
            for (int i = 0; i < reader.FieldCount; i++)
            {
                Console.WriteLine(reader.GetValue(i));
            }
            Console.WriteLine();
        }
    }
    Console.ReadLine();
}
于 2015-03-29T22:31:06.470 に答える