0

テーブルの 1 つに、値を YES/NO データ型で格納するフィールドがあります。

次のクエリを使用してフィールドの値を確認しようとしていますが、下の図に示すようにエラーが発生します。

public string getAccess(string username)
        {
            // Create connection object
            OleDbConnection oleConn = new OleDbConnection(connString);
            oleConn.Open();
            string sql = "SELECT [admin] FROM [Users] WHERE [username]='" + username + "'";
            OleDbCommand cmd = new OleDbCommand(sql, oleConn);
            string x = (string)cmd.ExecuteScalar();


            oleConn.Close();


            return x;
        }

フィールドadminは YES/NO タイプのデータ フィールドにあります。

ここに画像の説明を入力

データ型の値を確認するにはどうすればよいですか? 間違っている場合はクエリで修正してください。

4

2 に答える 2

2

Access の yes/no フィールドは、SQL Server のビット フィールド型と同等であるため、メソッドから文字列ではなくブール値を返す必要があると思います。次のようにしてみてください。

public bool isAdmin(string username)
{
    // Create connection object
    OleDbConnection oleConn = new OleDbConnection(connString);
    oleConn.Open();
    string sql = "SELECT [admin] FROM [Users] WHERE [username]='" + username + "'";
    OleDbCommand cmd = new OleDbCommand(sql, oleConn);
    bool x = (bool)cmd.ExecuteScalar();

    oleConn.Close();

    return x;
}

または、文字列を戻り値にすることが決定されている場合は、次のようになります。

public string getAccess(string username)
{
    // Create connection object
    OleDbConnection oleConn = new OleDbConnection(connString);
    oleConn.Open();
    string sql = "SELECT [admin] FROM [Users] WHERE [username]='" + username + "'";
    OleDbCommand cmd = new OleDbCommand(sql, oleConn);
    bool x = (bool)cmd.ExecuteScalar();

    oleConn.Close();

    return x ? "Yes" : "No";
}
于 2013-06-12T04:28:55.027 に答える
1

メソッドの型を bool に変更し、動作するようにしました

public bool getAccess(string username)
        {
            // Create connection object
            OleDbConnection oleConn = new OleDbConnection(connString);
            oleConn.Open();
            string sql = "SELECT [admin] FROM [Users] WHERE [username]='" + username + "'";
            OleDbCommand cmd = new OleDbCommand(sql, oleConn);
            bool x = (bool)cmd.ExecuteScalar();


            oleConn.Close();


            return x;
        }
于 2013-06-12T04:19:46.400 に答える