c#写的批量插入,写入的正确的记录条数,但是每一条记录里的字段都是空的(NULL)。
代码如下using (MySqlConnection conn = new MySqlConnection(connectionString))
                            {
                                conn.Open();
                                MySqlDataAdapter sd = new MySqlDataAdapter();
                                sd.SelectCommand = new MySqlCommand("select url_link,url_name from urltest where 1=0", conn);
                                sd.InsertCommand = new MySqlCommand("insert into urltestt (url_link,url_name) "
                                    + " values (url_link,url_name);", conn);
                                sd.InsertCommand.Parameters.Add("@url_link", MySqlDbType.VarChar, 255, "urladd");
                                sd.InsertCommand.Parameters.Add("@url_name", MySqlDbType.VarChar, 255, "urlname");
                                sd.InsertCommand.UpdatedRowSource = UpdateRowSource.None;
                                sd.UpdateBatchSize = 0;
                                DataSet dataset = new DataSet();
                                sd.Fill(dataset);                            Regex reg = new Regex(@"(?is)<a[^>]*?href=(['""]?)(?<url>[^'""\s>]+)\1[^>]*>(?<text>.*?)</a>");//正则表达式取得连接和标题
                            Regex regTag = new Regex(@"<[^>]*>");
                            MatchCollection mc = reg.Matches(htmltext);//htmltext为获得的网页源码
                            foreach (Match m in mc)
                            {
                                string urladd = GetAbsolutePath(urllink, m.Groups["url"].Value);//GetAbsolutePath函数是相对地址转换成绝对地址
                                string urlname = regTag.Replace(m.Groups["text"].Value.Trim(), "");
                                object[] row = {urladd,urlname};
                                this.richTextBox1.Text += row[0].ToString();
                                dataset.Tables[0].Rows.Add(row);
                              }
                                                          
                            sd.Update(dataset.Tables[0]);
                            this.label1.Text = dataset.Tables[0].Rows[0][0].ToString()+"------ " + dataset.Tables[0].Rows[0][1].ToString();
//因为一直插入的是空数据,所以在这个让dataset.tables[0]里第一条数据显示,结果是符合要求的正常数据。
                            dataset.Tables[0].Clear();
                            sd.Dispose();
                            dataset.Dispose();
                            conn.Close();
                        }

解决方案 »

  1.   

    更新前创建命令生成器:SqlCommandBuilder cb=new SqlCommandBuilder(sd);
      

  2.   

    加入
    MySqlCommandBuilder cb = new MySqlCommandBuilder(sd);
    sd.InsertCommand = cb.GetInsertCommand();
    依然不能解决问题,实际上,sd.Update(dataset.Tables[0]);是正常的执行了的,只是里面的数据有问题
      

  3.   

    知道问题所在了,sd.InsertCommand.Parameters.Add("@url_link", MySqlDbType.VarChar, 255, "urladd");
    应该是
    sd.InsertCommand.Parameters.Add("@url_link", MySqlDbType.VarChar, 255, "url_link");