Простой способ преобразовать таблицу данных в хеш-таблицу или sqldatareader в хеш-таблицу - PullRequest
9 голосов
/ 16 апреля 2010

Есть ли простой способ преобразовать DataTable в HashTable или SQLDataReader в HashTable? Я должен разобрать его через javascriptserializer. Код, который я использую, имеет некоторые проблемы:

try
{
    using (SqlConnection conn = new SqlConnection(ConnectionString))
    {
        using (SqlCommand cmd = new SqlCommand(query, conn))
        {
            conn.Open();
            SqlDataReader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
            dt.Load(dr);
        }
    }

    Hashtable sendData = new Hashtable();

    foreach (DataRow drIn in dt.Rows)
    {

        sendData.Add(drIn["orderNumber"].ToString(), drIn["customerName"].ToString());

    }

    sendData.Add("orderNum", order);
    JavaScriptSerializer jss = new JavaScriptSerializer();
    string output = jss.Serialize(sendData);
    return output;
}
catch (Exception ex)
{
    return ex.Message + "-" + ex.StackTrace;
}

Дает правильный результат при запросе из одной таблицы в базе данных, но из другой таблицы возникают проблемы.

Есть ли другой способ сделать это?

Ответы [ 2 ]

0 голосов
/ 08 января 2018

Вы можете использовать следующую функцию для преобразования DataTable в HashTable,

public static Hashtable convertDataTableToHashTable(DataTable dtIn,string keyField,string valueField)   
{    
   Hashtable htOut = new Hashtable();    
   foreach(DataRow drIn in dtIn.Rows)    
   {    
      htOut.Add(drIn[keyField].ToString(),drIn[valueField].ToString());    
   }   
   return htOut;    
}

Тогда в вашем коде просто используйте,

Hashtable sendData = new Hashtable();
//You need to pass datatable, key field and value field
sendData = convertDataTableToHashTable(dt, "orderNumber", "customerName");
0 голосов
/ 01 ноября 2012
public static Hashtable Fn_ConvertDataTableToHashTable(DataTable dtTable, int iRow)
{
        Hashtable hshTable = new Hashtable();

        if (CommonUtil.Fn_CheckDatatableHasValue(dtTable))
        {
            foreach (DataColumn column in dtTable.Columns)
            {

                hshTable.Add(column.ColumnName, dtTable.Rows[iRow][column.ColumnName].ToString());
            }
        }

        return hshTable;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...