запись XML-данных на сервер SQL с использованием sqlbulkcopy в C # asp.net - PullRequest
2 голосов
/ 23 сентября 2011

У меня есть два xml-файла в системе m, которые называются customer.xml и customerdetails.xml. Я пытаюсь записать эти данные непосредственно в базу данных SQL, которую я создал в asp.net. Все мое кодирование в C #. База данных sql содержит таблицу с именем CustomerDetails, в которой есть поля CustomerID, CustomerN, CustomerLN, CustomerAdd, CustomerTelNo и Comments.

В asp.net я создал страницу с именем update, которая содержит элемент управления загрузкой, который я пытаюсь получить в формате XML и записать данные в базу данных. Код для управления выглядит следующим образом:

using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Sql;
using System.Data.SqlClient;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace WebApplication9
{
public partial class WebForm1 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Button1_Click(object sender, EventArgs e)
{
if (FileUpload1.HasFile)
{
string fileExt = System.IO.Path.GetExtension(FileUpload1.FileName);
if (fileExt == ".xml")
{
try
{
DataSet reportData = new DataSet();
SqlConnection connection = new SqlConnection(@"Data Source=.\SQLEXPRESS;  
AttachDbFilename=|DataDirectory|\CustomerDetails.mdf;Integrated  
Security=True;User Instance=True");
SqlBulkCopy sbc = new SqlBulkCopy(connection);
sbc.DestinationTableName = "CustomerInfo";
connection.Open();
sbc.WriteToServer(reportData.Tables[0]);
}
catch (Exception ex)
{
 Label1.Text = "ERROR: " + ex.Message.ToString();
 }
 }
 else
 {
                Label1.Text = "Only .xml files allowed!";
            }
        }
        else
        {
            Label1.Text = "You have not specified a file.";
        }
    }
}

}

Однако, когда я пытаюсь получить файл, я получаю ошибку, которая говорит, что не может найти таблицу [0];

Может кто-нибудь помочь мне определить, в чем здесь проблема !!

Ответы [ 3 ]

1 голос
/ 23 сентября 2011

Вам нужно каким-то образом получить данные XML в DataSet, прежде чем вы сможете вызвать .Tables [0]. Попробуйте использовать функцию .ReadXml() класса DataSet для загрузки данных в ваш набор данных:

ОТ: http://msdn.microsoft.com/en-us/library/fx29c3yd(v=VS.100).aspx

DataSet dataSet = new DataSet();
DataTable dataTable = new DataTable("table1");
dataTable.Columns.Add("col1", typeof(string));
dataSet.Tables.Add(dataTable);

string xmlData = "<XmlDS><table1><col1>Value1</col1></table1><table1><col1>Value2</col1></table1></XmlDS>";

System.IO.StringReader xmlSR = new System.IO.StringReader(xmlData);

dataSet.ReadXml(xmlSR, XmlReadMode.IgnoreSchema);

Тогда вы сможете звонить sbc.WriteToServer(reportData.Tables[0]); без проблем.

1 голос
/ 23 сентября 2011

Все, что вы здесь сделали, - это создали набор данных. Для того, чтобы пользовательская таблица [0], в набор данных необходимо добавить таблицу данных.

Вот некоторые основы для добавления данных в набор данных:

http://msdn.microsoft.com/en-us/library/aeskbwf7(v=vs.80).aspx

0 голосов
/ 23 сентября 2011

Во-первых, вам нужно сохранить файл на сервере.После сохранения файла вы можете заполнить свой DataTable, используя метод DataTable.ReadXml ().

string physicalFilename = Server.MapPath("~/") + filename;
FileUploadControl1.SaveAs(physicalFilename);
DataTable dt = new DataTable(); 
dt.ReadXml(physicalFileName);
// use SlkBulkCopy to import the dt

Вам может потребоваться добавить ColumnMappings в коллекцию SqlBulkCopy.ColumnMappings, если имена столбцов DataTable не совпадают точно с тем, что находится в вашей базе данных.

...