Разбор данных SQL через System.Data - PullRequest
0 голосов
/ 08 октября 2019

В настоящее время я пишу приложение на IronPython / WPF и буду интенсивно использовать операторы выбора и установки SQL во время производства.

Я успешно подключился к серверу и могу получать нужные данные с помощью запросов. Однако у меня возникли проблемы с анализом данных ответа. См. Ниже код

import clr
clr.AddReference('System.Data')
from System.Data import *

query = 'sqlquery'

conn = SqlClient.SqlConnection(--sql connection properties--)
conn.Open()

result = SqlClient.SqlCommand(query, conn)
data = result.ExecuteReader()

while data.Read():
    print(data[0])

data.Close()
conn.Close()

У меня возникла проблема print(data[0]), необходимая для печати любого ответа SQL, простая печать (данные) возвращает:

<System.Data.SqlClient.SqlDataReader object at 0x00000000000002FF [System.Data.SqlClient.SqlDataReader]>

Однако print(data[0]) возвращает только индекс строки в SQL, [1] следующий столбец и т. Д. И т. Д.

Я хотел бы получить доступ ко всем данным из строки (где строки могут быть переменнымидлины, разные запросы и т. д.)

Как я могу заставить это работать?

РЕДАКТИРОВАТЬ:

Я успешно извлек все данные из одной строкиответ со следующим кодом:

for i in range(1, data.FieldCount):
     print(data.GetName(i))
     print(data.GetValue(i))

Просто нужно определить, как выполнить эту итерацию для всех возвращаемых строк, чтобы я мог передать ее в dict / datagrid

1 Ответ

0 голосов
/ 08 октября 2019

Я нашел решение, которое работает для меня.

Использование SqlAdapter и Datasets для последующего хранения / просмотра данных по мере необходимости

def getdataSet(self, query):
        conn = SqlClient.SqlConnection(---sql cred---))
        conn.Open()

        result = SqlClient.SqlCommand(query, conn)
        data = SqlClient.SqlDataAdapter(result)

        ds = DataSet()
        data.Fill(ds)

        return ds

def main(self):
        ds = self.getdataSet("query")

        self.maindataGrid.ItemsSource = ds.Tables[0].DefaultView

...