通过SQL来获取listview结果以获得"结果"

时间:2015-11-26 12:06:57

标签: c# sql xml winforms

我试图通过sql命令解析arr [0]的结果以获得结果,然后将其放入arr [0]结果的替换中。

第一个结果arr [0]给我的是:34

所以我想得到结果34通过我的SQL连接解析它以返回结果" Trtanium"。

这是我正在使用的代码;

    private void JitaOrePrices()
    {            

        ListViewItem itm;

        //listview settings.
        listView1_Jita.View = View.Details;
        listView1_Jita.GridLines = true;
        listView1_Jita.FullRowSelect = true;

        //convert to string.
        string string1 = "http://api.eve-central.com/api/marketstat?typeid=34&minQ=1&typeid=35&minQ=1&typeid=36&minQ=1&typeid=37&minQ=1&typeid=38&minQ=1&typeid=39&minQ=1&typeid=40&minQ=1&typeid=11399&minQ=1&usesystem=30000142";

        // add colums to put into. 
        listView1_Jita.Columns.Add("Type", 45);
        listView1_Jita.Columns.Add("(B)", 70);
        listView1_Jita.Columns.Add("(S)", 70);

        //set arrays to put into.
        string[] arr = new string[3];

        XmlDocument doco = new XmlDocument();
        doco.Load(string1);            
        XmlNodeList Blist = doco.SelectNodes("/evec_api/marketstat/type");
        foreach (XmlNode xnod in Blist)           
        {
            SqlConnection SQLC = new SqlConnection("user id=No_IdeaV2;" + "password = ********;server =******;" + "Trusted_Connection=yes;" + "database = 12345;" + "connection timeout = 30");

            SQLC.Open();

            SqlCommand SQLLookup = new SqlCommand("SELECT typeName FROM invTypes WHERE typeID = 'THIS IS WHERE I AM STUCK'");

            XmlNode znod = xnod.SelectSingleNode("buy");
            XmlNode dnod = xnod.SelectSingleNode("sell");

            if (xnod.Attributes["id"] != null)
            {
                arr[0] = xnod.Attributes["id"].InnerText;
                arr[1] = znod.SelectSingleNode("max").InnerText;
                arr[2] = dnod.SelectSingleNode("max").InnerText;
            }

                itm = new ListViewItem(arr);
            itm.Font = new Font("Tahima", 9);
            listView1_Jita.Items.Add(itm);        
        }


    }

1 个答案:

答案 0 :(得分:1)

假设您的typeID列是一个数字字段,请按以下步骤创建您的sql命令:

using (SqlConnection SQLC = new SqlConnection( /* as shown by OP */))
{
  SQLC.Open();
  foreach (XmlNode xnod in Blist)           
  {
    // I guess you would leave those nodes out entirely
    if (xnod.Attributes["id"] == null) continue;
    XmlNode znod = xnod.SelectSingleNode("buy");
    XmlNode dnod = xnod.SelectSingleNode("sell");

    arr[0] = xnod.Attributes["id"].InnerText;
    arr[1] = znod.SelectSingleNode("max").InnerText;
    arr[2] = dnod.SelectSingleNode("max").InnerText;

    SqlCommand SQLLookup = new SqlCommand(string.Format("SELECT typeName FROM invTypes WHERE typeID = {0}", arr[0]), SQLC); // don't forget to set the connection

    arr[0] = SQLLookup.ExecuteScalar() as string;

    itm = new ListViewItem(arr);
    itm.Font = new Font("Tahima", 9);
    listView1_Jita.Items.Add(itm);        
  }
}

我将连接放到外部作用域,这样您就不必为每个节点打开一个新连接。并且它在使用声明中,因此它被正确关闭并在之后清理。

请务必添加一些错误处理,因为sql连接可能会在网络错误上引发异常,或者您可能找不到typeID等。

如果您的typeID列是字符串类型,请将格式字符串更改为"... WHERE typeID = '{0}'"