私はxmlファイルからSQL Serverに自分のデータを転送するC#でSQLクエリを作成しようとしています。私は正常に "get、set"メソッドに自分のXMLを逆シリアル化し、コンソールに私のXMLを出力することができます。私は私のSQLテーブルに自分のXMLを追加するための挿入クエリを作成する方法を見つけるために、過去の日にGoogleを検索してきました。ここで私は両方のクラスでこれまでに持っていたことがあります。 Class1は私の "get、set"メソッドクラスで、Programは私の "main"メソッドクラスです。デシリアライズされたXMLのSQLクエリ
Class1.csの
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml.Serialization;
namespace ConsoleApp1
{
public class Class1
{
public static object Item_ID { get; set; }
public static object Invent_id { get; set; }
public static object Itemsize { get; set; }
public static object Color { get; set; }
public static decimal Curr_price { get; set; }
public static object Qoh { get; set; }
}
public class transactions
{
[XmlRoot(ElementName = "UPDATE")]
public class UPDATE
{
[XmlAttribute(AttributeName = "qoh")]
public string Qoh { get; set; }
[XmlAttribute(AttributeName = "curr_price")]
public string Curr_price { get; set; }
[XmlAttribute(AttributeName = "color")]
public string Color { get; set; }
[XmlAttribute(AttributeName = "itemsize")]
public string Itemsize { get; set; }
[XmlAttribute(AttributeName = "invent_id")]
public string Invent_id { get; set; }
[XmlAttribute(AttributeName = "item_id")]
public string Item_id { get; set; }
}
[XmlRoot(ElementName = "ADD")]
public class ADD
{
[XmlAttribute(AttributeName = "qoh")]
public string Qoh { get; set; }
[XmlAttribute(AttributeName = "curr_price")]
public string Curr_price { get; set; }
[XmlAttribute(AttributeName = "color")]
public string Color { get; set; }
[XmlAttribute(AttributeName = "itemsize")]
public string Itemsize { get; set; }
[XmlAttribute(AttributeName = "invent_id")]
public string Invent_id { get; set; }
[XmlAttribute(AttributeName = "item_id")]
public string Item_id { get; set; }
}
[XmlRoot(ElementName = "DELETE")]
public class DELETE
{
[XmlAttribute(AttributeName = "item_id")]
public string Item_id { get; set; }
}
[XmlRoot(ElementName = "transactions")]
public class Transactions
{
[XmlElement(ElementName = "UPDATE")]
public UPDATE UPDATE { get; set; }
[XmlElement(ElementName = "ADD")]
public List<ADD> ADD { get; set; }
[XmlElement(ElementName = "DELETE")]
public DELETE DELETE { get; set; }
}
}
}
メインクラス
using System;
using System.Collections.Generic;
using System.Data.Odbc;
using System.Data.SqlClient;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml;
using System.Xml.Linq;
using System.Xml.Serialization;
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
string conString = "Driver={MySQL ODBC 5.3 ANSI Driver};"
+ "Server=XXX;Port=YYY;"
+ "Database=inventory;"
+ "uid=ZZZ;pwd=XYZ";
OdbcConnection connection = new OdbcConnection(conString);
{
XDocument theFile = XDocument.Load("C:\\Users\\Bob\\Documents\\Update.xml");
foreach (XElement el in theFile.Root.Elements())
{
if (el.Name == "ADD")
{
Console.WriteLine("{0} {1} {2} {3} {4} {5} {6}", el.Name, el.Attribute("qoh").Value, el.Attribute("curr_price").Value, el.Attribute("color").Value, el.Attribute("itemsize").Value, el.Attribute("invent_id").Value, el.Attribute("item_id").Value);
Console.ReadLine();
OdbcCommand Command1 = new OdbcCommand("INSERT INTO item (item_id, invent_id, itemsize, color, curr_price, qoh) VALUES(?, ?, ?, ?, ?, ?) ", connection);
Command1.Parameters.Add("@SZ", OdbcType.VarChar).Value = Class1.Itemsize;
Command1.Parameters.Add("@COL", OdbcType.VarChar).Value = Class1.Color;
Command1.Parameters.Add("@PR", OdbcType.Double).Value = (double)Class1.Curr_price;
Command1.Parameters.Add("@QOH", OdbcType.Int).Value = Class1.Qoh;
Command1.Parameters.Add("@ID", OdbcType.Int).Value = Class1.Item_ID;
Console.ReadLine();
}
else if (el.Name == "UPDATE")
{
Console.WriteLine("{0} {1} {2} {3} {4} {5} {6}", el.Name, el.Attribute("qoh").Value, el.Attribute("curr_price").Value, el.Attribute("color").Value, el.Attribute("itemsize").Value, el.Attribute("invent_id").Value, el.Attribute("item_id").Value);
Console.ReadLine();
}
else if (el.Name == "DELETE")
{
Console.WriteLine("{0} {1}", el.Name, el.Attribute("item_id").Value);
Console.ReadLine();
}
}
}
}
}
}
更新:MySQLのLOADクエリを使用してに関しては
、ここでは、私が持っているものですが、それが正しいかどうかを確認していません。 Infile Loadingに関するあなたのリンクを読んだ後、私はちょうどxmlファイルの場所にクエリを指していると私のSQLテーブル内のフィールドにデータをコピーします。私はまた、正しい順序でパラメータを変更しても動作しません。それは私のXMLファイルまたは私のパラメータ行からの値が正しく表示されていないようです。
OdbcCommand Command1 = new OdbcCommand("LOAD XML LOCAL INFILE 'C:\\Users\\Bob\\Documents\\Update.xml' INTO TABLE item ROWS IDENTIFIED BY '<ADD>'");
のMySQL 5.5以降は、LOAD XMLの読み込み(https://dev.mysql.com/doc/refman/5.5/en/load-xml.html) –
をサポートしています彼らが現れるのと同じ順序でパラメータを追加します。 INSERTステートメント。 – Crowcoder
実行するリーダー行がありませんか? LOAD XML INFILEを使用する場合はこれが必要ですか? – Fusion