日期:2014-05-17  浏览次数:20956 次

批量导入SQL数据库的错误
我做了一个datagridview导入SQL数据库的模块,然后在数据库里面设置了A列不能为空.
现在有2个模块,第一个模块是一条一条输入数据,然后保存,这个没问题.
第二个模块是选择某一个excel 文件,然后把excel 的数据装入datagridview,再把datagridview的数据批量写入到sql数据库里面,这时就出现问题,即使A列是空值,依然可以写入,sql一点反应都没有,try/catch也捕捉不到任何异常?救命啊~~~
第一个模块(手动录入)

第二个模块(批量导入)


批量导入代码:
private void inserttosql(DataRow dr)
  {
  string connstr = "server=JJJKKK;Initial Catalog=dt_xxgl;UID=sa;PWD=123";
  string xm = dr["姓名"].ToString();
  string sfz = dr["身份证"].ToString();
  string xb = dr["性别"].ToString();
  string csrq = dr["出生日期"].ToString();
  string xz = dr["乡镇"].ToString();
  string xxdz = dr["详细地址"].ToString();
  string bz = dr["备注"].ToString();
  string sql = "insert into jbxx(姓名,身份证,性别,出生日期,乡镇,详细地址,备注) values('" + xm + "','" + sfz + "','" + xb + "','" + csrq + "','" + xz +"','" + xxdz +"','" + bz +"')";
  SqlConnection conn = new SqlConnection(connstr);
  SqlCommand cmd = new SqlCommand(sql, conn);
  conn.Open();
  cmd.ExecuteNonQuery();
  conn.Close();
  textBox1.Text = null; 
  }

  private void btn_insert_Click(object sender, EventArgs e)
  {
  if (dataGridView1.Rows.Count > 0 )
  {
  DataRow dr = null;
  try
  {
  for (int i = 0; i < dt.Rows.Count; i++)
  {
  dr = dt.Rows[i];
  inserttosql(dr);
  }
  MessageBox.Show("插入成功!");
  dataGridView1.DataSource = null;
  }
  catch (Exception err)
  {
  MessageBox.Show("操作失败!" + err.ToString());
  }
   
  }
  else
  {
  MessageBox.Show("没有数据!");
  }

  }

------解决方案--------------------
数据库里面设置不能为空是指,不能为NULL, 空字符串"" 不是null.

你的代码中,并没有判断datagridview中的cell是不是为null,还是空字符串.