문제

안녕하세요, ASP.NET 및 C#과 함께 일하면서 MySQL의 커넥터/넷 플러그인이 사용하여 MySQL DB에 연결합니다 (놀라움이 없습니다!).

그리고 그것은 잘 작동하고, 연결하고, 쿼리를 실행할 수 있지만, 모두 괜찮고 멍청하지만 결과의 해시 가능 또는 유사한 결과를 반환 할 수 있습니까? 동일한 테이블에서 설명 실행을 저장하여 열 이름을 얻고 해당 값을 사용하여 매번 해시를 만듭니다.

감사,

PSY

도움이 되었습니까?

해결책

C# (C#에서 재 구현 된 대) 주위에 포장 된 것으로 가정 한 MySQL C/C ++ 커넥터는 결과를 포함하는 2- 살인 배열을 반환합니다. 이것은 열 이름이 아닌 열 및 행 데이터입니다. API는 또한 필드 (열 이름) 값을 반환합니다. mysql_fetch_field_direct() - 쿼리 결과를 얻은 후 별도의 기능 호출. 이것은 또한 2 번의 치유 배열입니다. 커넥터 자체에는 두 개의 개별 결과 (열 이름 + 열/행 데이터)를 해시 테이블로 병합하기위한 API가 포함되어 있지 않습니다.

열 이름을 얻기 위해 두 번째 쿼리를 만드는 대신 mysql_fetch_field_direct() 할당 값을 통해 진행할 때 각 열에 대해. 이것은 해당 열/행에 포함 된 데이터와 함께 필드 이름을 제공합니다. 이 시점에서 해시 테이블에 저장하는 것과 같은 데이터를 정리하는 방법에 대해서는 개발자에게 달려 있습니다.

나는 헬퍼 기능을 쿼리 실행 주위의 래퍼로 사용하여 각 행을 바이너리 트리에 저장하고 열 이름이 키입니다.

다른 팁

.NET에서는 DataTables 및 DataSets 만 얻을 수 있으며 DataTable은 DataRows로 만들어지며 해시블과 매우 유사하며 대부분의 경우 작업을 달성하는 데 사용될 수 있지만 해시 테이블이 필요한 경우이 코드를 사용할 수 있습니다.

public static Hashtable convertDataRowToHashTable(DataRow dr)
{
    if (dr == null)
    {
        return null;
    }

    Hashtable ret = new Hashtable(dr.Table.Columns.Count);

    for (int iColNr = 0; iColNr < dr.Table.Columns.Count; iColNr++)
    {
        ret[dr.Table.Columns[iColNr].ColumnName] = dr[iColNr];
    }
    return ret;
}

Datarow는 공개 생성자 (설계 별)가없고 Newrow = MyDatatable.newrow ()를 호출해야하므로 다른 방향 (Datrow에서 Datrow 로의 Hast Table)은 쉽지 않습니다. 새로운 행의 인스턴스를 얻으려면 거의 hashtable과 마찬가지로 행을 사용할 수 있습니다.

newRow["column1"]="some value";

그러나 Hashtable에 새 열이 필요한 경우 DataTable에 열을 추가하고 Data Row MyTable.columns.add ( "name", "type");

도움이 되었기를 바랍니다

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top