日期:2014-05-18  浏览次数:20423 次

将数据类型 varchar 转换为 numeric 时出错。
 
 for (int i = 0; i < dt.Rows.Count; i++)
  {
  string ResponseSQL = "";
  string ch = "'" + dt.Rows[i][0].ToString() + "'";
  string fzb = "'" + dt.Rows[i][1].ToString() + "'";
  string caf = "'" + dt.Rows[i][2].ToString() + "'";
  string mgf = "'" + dt.Rows[i][3].ToString() + "'";
  string rq = "'" + dt.Rows[i][4].ToString() + "'";
.........
string ResponseSQL1 = string.Format("insert into ex_qm_djzy(槽号,分子比,CaF2,MgF2,化验日期) values({0},{1},{2},{3},{4})", ch, isnull(fzb,0), isnull(caf,0), isnull(mgf,0), rq);//sql语句插入  
  SqlCommand cmd1 = new SqlCommand(ResponseSQL1, conn);

  cmd1.CommandType = CommandType.Text;
  // Response.Write(ResponseSQL1);
  cmd1.CommandText = ResponseSQL1;
  r2 = cmd1.ExecuteNonQuery() + r2;
 从excel表中获取的值,分子比,CaF2,MgF2有可能有空值,运行程序插入数据库的时候出这个错误,分子比,CaF2,MgF2在数据库中是decimal类型的,怎么让空值插进去呢,把空值变为插进去也行,还有好办法吗

------解决方案--------------------
string fzb = dt.Rows[i][1].ToString(); 
string caf = dt.Rows[i][2].ToString(); 
string mgf = dt.Rows[i][3].ToString() ; 
改三个就行了。试试吧。
numeric,decimal这些列是不用单引号的。
------解决方案--------------------
两点: 1.从excel中取出来的数据如果为空是应该是 DBNull.Value,而不是null或"", 2. isnull() 判断的是null;