2

次のコードを実行すると:

query = "select count(*) from table where name = '?name'";
MySqlConnection connection = 
  new MySqlConnection(ConfigurationManager.ConnectionStrings["mydb"].ToString());
connection.Open();
MySqlCommand command = new MySqlCommand(query,connection);
command.Parameters.Add("?name", name);
Int32 number = command.ExecuteScalar();

numberint にキャストされた場合でも、常にゼロです。

私はそれをint64に変換しようとしましたが、サイコロはありません。私は試しcommand.Prepare()ました。私はConvert.ToInt32()他のすべてのバリエーションを使用してみました。これが示唆することを逐語的に引用することを含め、太陽の下でほぼすべてを試しましたが、サイコロは出ません。オブジェクトを整数、long、int32 としてキャストしようとしても、うまくいかないようです。これらの結果は常に 0 であるか、MySQL エラーを引き起こします。

EDIT:スタックオーバーフローは、コードタグでそのコードを適切にフォーマットしません。お詫び申し上げます

4

1 に答える 1

5

その理由は、パラメータが一重引用符で囲まれているため、文字列になっているためです。それを削除すると、動作します、

query = "select count(*) from table where name = @name";
MySqlConnection connection = new MySqlConnection(ConfigurationManager.ConnectionStrings["mydb"].ToString());
connection.Open();
MySqlCommand command = new MySqlCommand(query,connection);
command.Parameters.Add("@name", name);

より良いコードのために、

  • using適切なオブジェクトの廃棄に使用
  • try-catch例外を適切に処理するためのブロックの使用

コードスニペット、

query = "select count(*) from table where name = @name";
string connString =ConfigurationManager.ConnectionStrings["mydb"].ToString();
using(MySqlConnection connection = new MySqlConnection(connString))
{
    using(MySqlCommand command = new MySqlCommand(query, connection))
    {
        command.Parameters.Add("@name", name);
        try
        {
            connection.Open();
            // other codes
        }
        catch(MySqlException ex)
        {
            // do somthing with the exception
            // don't hide it
        }
    }
}
于 2013-02-08T02:28:57.527 に答える