【问题标题】:From DataTable Insert into Sql Server Database从 DataTable 插入 Sql Server 数据库
【发布时间】:2015-02-20 06:51:19
【问题描述】:

我正在从 XML 文件加载数据并填写 DataTable。然后我使用存储过程将该数据插入 SQL Server。

我正在使用此代码,但保存到数据库时它不起作用:

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");
            }

【问题讨论】:

  • 您遇到了什么错误?
  • 显示您的存储过程代码..
  • 您正在循环数据并尝试插入每一行。此外,如果您在 SP 中使用表值参数,则必须将其 SqlDbType 设置为 System.Data.SqlDbType.Structured。查看更多关于表值参数stackoverflow.com/questions/10409576/…
  • 您正在为每个 XML 节点调用存储过程 - 这真的是您想要的吗?您不打算首先加载整个XML(遍历所有节点),然后在完成后一次保存结果数据表吗??
  • 执行cmd时的错误,

标签: c# sql-server


【解决方案1】:

您可以在SQL server 中使用uder-defined-table-type 将DataTable 插入到SQL Server 中更加顺畅。

创建用户自定义表类型Example

在过程Example中使用用户定义的表格类型

【讨论】:

    【解决方案2】:

    是的,现在已经解决了, 此代码有效:

     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");
    
            }
        }
    

    【讨论】:

      猜你喜欢
      • 2013-06-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多