2015-02-20 2 views
1

Я загружаю данные из XML-файла и заполняю DataTable. Затем я вставляю эти данные в SQL Server с помощью хранимой процедуры.Из DataTable Вставить в базу данных сервера Sql

Я использую этот код, но он не работает при сохранении в базу данных:

private void button1_Click(object sender, EventArgs e) 
{ 
     XmlDocument xmldoc = new XmlDocument(); 
     xmldoc.Load(@"D:\DBXML.xml"); 

     XmlElement root = xmldoc.DocumentElement; 
     XmlNodeList nodes = root.SelectNodes("/students/student"); 

     DataTable dt = new DataTable(); 
     dt.Columns.Add("Nama", typeof(string)); 
     dt.Columns.Add("Alamat", typeof(string)); 

     foreach (XmlNode item in nodes) 
     { 
      DataRow dr = dt.NewRow(); 
      dr[0] = item["name"].InnerText; 
      dr[1] = item["address"].InnerText; 
      dt.Rows.Add(dr); 

      dataGridView1.DataSource = dt; 

      using (var cmd = new SqlCommand("InsertSiswa") { CommandType = CommandType.StoredProcedure }) 
      { 
       //DataTable dt = new DataTable(); 
       cmd.Parameters.Add(new SqlParameter("@MyDataTable", dt)); 
       cmd.ExecuteNonQuery(); 
       MessageBox.Show("Sukses"); 
      } 
+0

Что что вы получаете? – Venki

+0

покажите свой код процедуры магазина. – Dhaval

+1

Вы зацикливаете данные и пытаетесь вставить каждую строку. Также, если вы используете параметр значения таблицы в SP, тогда вы должны установить его SqlDbType как System.Data.SqlDbType.Structured. Подробнее о параметре значения таблицы http://stackoverflow.com/questions/10409576/pass-table-valued-parameter-using-ado-net –

ответ

1

вы можете использовать uder определенного-таблицу типа в сервере SQL для вставки DataTable к SQL Server в более плавный путь.

создать стол типа, определяемые пользователем Example

использования пользователем определенного СТОЛ типа в процедуре Example

+0

cmd.executequery() еще ошибка –

+0

попытаться дать cmd.ExecuteNonQuery() http://goo.gl/9vDm4q – Venki

0

да теперь было решено, этот код работы:

SqlConnection koneksi = null; 
     koneksi = new SqlConnection(conn); 
     koneksi.Open(); 

     XmlDocument xmldoc = new XmlDocument(); 
     xmldoc.Load(@"D:\DBXML.xml"); 
     XmlElement root = xmldoc.DocumentElement; 
     XmlNodeList nodes = root.SelectNodes("/students/student"); 
     DataTable dt = new DataTable(); 
     dt.Columns.Add("Nama", typeof(string)); 
     dt.Columns.Add("Alamat", typeof(string)); 
     foreach (XmlNode item in nodes) 
     { 
      DataRow dr = dt.NewRow(); 
      dr[0] = item["name"].InnerText; 
      dr[1] = item["address"].InnerText; 
      dt.Rows.Add(dr); 
      dataGridView1.DataSource = dt; 



     } 
     //senddtata(); 
     string dtout = dt.Rows[2][1].ToString(); 

     SqlCommand cmd = new SqlCommand("InsertSiswa",koneksi); 
     cmd.CommandType = CommandType.StoredProcedure; 
     { 
      //DataTable dt = new DataTable(); 
      cmd.Parameters.Add(new SqlParameter("@mytable", dt)); 
      cmd.ExecuteNonQuery(); 
      MessageBox.Show("Sukses"); 

     } 
    } 
Смежные вопросы