在下面的语法中,我创建了一个datatable
,然后使用datatable
API调用的结果填充XML
。完全处理List<string>
数组后,我想迭代datatable
并更新加入字段SQL Server 2008
的{{1}}表。下面是我的语法,它不会抛出对我来说有任何错误,但它也没有更新SQL表。有人可以更熟练地看一看并指出我设置错误吗?
ID
修改
这是表结构,我知道在一个字段中存储日期并在另一个字段中存储时间不是很好的方法,但这是我们使用的第三方应用程序的数据结构,我们无法控制。此数据结构中列出的字段与我的更新语句中列出的字段完全相同。 static void Main(string[] args)
{
DataTable dt = new DataTable()
dt.Columns.Add("ID", typeof(int));
dt.Columns.Add("fire",typeof(string));
dt.Columns.Add("ice",typeof(string));
dt.Columns.Add("blue",typeof(string));
dt.Columns.Add("pink",typeof(string));
dt.Columns.Add("hot",typeof(string));
dt.Columns.Add("red",typeof(string));
dt.Columns.Add("d1",typeof(DateTime));
dt.Columns.Add("t1",typeof(DateTime));
dt.Columns.Add("d2",typeof(DateTime));
dt.Columns.Add("t2",typeof(DateTime));
List<string> random = new List<string>() { "Red", "Blue", "Green", "Pink", "Hot", "Cold", "Orange" };
foreach (var abc in random)
{
//API Call Here that returns my variables
foreach (var stinkpot in xml.Descendants("APICall"))
{
fire = (string)stinkpot.Descendants("A").FirstOrDefault();
ice = (string)stinkpot.Descendants("B").FirstOrDefault();
blue = (string)stinkpot.Descendants("C").FirstOrDefault();
pink = (string)stinkpot.Descendants("D").FirstOrDefault();
hot = (string)stinkpot.Descendants("E").FirstOrDefault();
red = (string)stinkpot.Descendants("F").FirstOrDefault();
d1 = (string)stinkpot.Descendants("G").FirstOrDefault();
t1 = (string)stinkpot.Descendants("H").FirstOrDefault();
d2 = (string)stinkpot.Descendants("I").FirstOrDefault();
t2 = (string)stinkpot.Descendants("J").FirstOrDefault();
//Add variables to data table
dt.Rows.Add(abc, fire, ice, blue, pink, hot, red, d1, t1, d2, t2);
}
}
//Update SQL Server Table Here
foreach (DataRow dtRow in dt.Rows)
{
foreach(DataColumn dc in dt.Columns)
{
string updateCommand = "UPDATE sqltesttable SET [field1]=@fire, [field2] = @ice, [field3] = @blue, [field4] = @pink
,[field5] = @hot, [field6] = @red, [field7] = @d1, [field8] = @t1, [field9] = @d2, [field10] = @t2
WHERE ID = @id";
using (OleDbConnection conn = new OleDbConnection("csConnString"))
{
using (OleDbCommand comm = new OleDbCommand())
{
comm.Connection = conn;
comm.CommandText = updateCommand;
comm.CommandType = CommandType.Text
comm.Parameters.AddWithValue("@fire", dtRow[fire].ToString();)
comm.Parameters.AddWithValue("@ice", dtRow[ice].ToString();)
comm.Parameters.AddWithValue("@blue", dtRow[blue].ToString();)
comm.Parameters.AddWithValue("@pink", dtRow[pink].ToString();)
comm.Parameters.AddWithValue("@hot", dtRow[hot].ToString();)
comm.Parameters.AddWithValue("@red", dtRow[red].ToString();)
comm.Parameters.AddWithValue("@d1", dtRow[d1].ToString();)
comm.Parameters.AddWithValue("@t1", dtRow[t1].ToString();)
comm.Parameters.AddWithValue("@d2", dtRow[d2].ToString();)
comm.Parameters.AddWithValue("@t2", dtRow[t2].ToString();)
comm.Parameters.AddWithValue("@id", dtRow[id].ToString();)
try
{
comm.Open();
conn.ExecuteNonQuery();
}
catch(OleDbException ex)
{
MessageBox.Show(ex.Message.ToString());
}
}
}
}
}
}
是pk自动编号字段,uqID
是不是表的pk的唯一标识符。其余字段与hlpID
等匹配,以field1, field2
salestatus