我试图通过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);
}
}
答案 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}'"