数字存储为文本提供了一个错误

当我读取一个字段dt.Rows[0][j] ,尽pipe数据在excel表单中,但我总是得到null

我怎样才能抑制由于存储为文本号码造成的错误?

这是我正在使用的代码。

 using (SqlConnection con = new SqlConnection(consString)) { con.Open(); for (int i = 2; i < dt.Rows.Count; i++) { for (int j = 1; j < dt.Columns.Count; j += 3) { try { var s3 = sheetName.Remove(sheetName.Length - 1); s3 = s3.Replace("'", string.Empty); s3 = s3.Replace("$", string.Empty); if (s3[0] == '0') { s3 = s3.Remove(0, 1); } if ((!dt.Rows[0][j].ToString().Contains("total"))) { SqlCommand command = new SqlCommand("INSERT INTO [Budget]([CA TTC],[VAL MRG TTC],[CA HT],[VAL MRG HT],[Rayon],[Date],[Code Site],[Rayon Correspondance]) VALUES(@ca,@val,@catHT ,@valHT ,@rayon, @date ,@sheetName,null )", con); command.Parameters.AddWithValue("@date", dt.Rows[i][0]); command.Parameters.AddWithValue("@ca", dt.Rows[i][j]); command.Parameters.AddWithValue("@val", dt.Rows[i][j + 1]); command.Parameters.AddWithValue("@rayon", dt.Rows[0][j].GetType()); MessageBox.Show(dt.Rows[0][j].GetType().ToString()); command.Parameters.AddWithValue("@sheetName", s3); command.Parameters.Add("@catHT", DBNull.Value).Value = DBNull.Value; command.Parameters.Add("@valHT", DBNull.Value).Value = DBNull.Value; command.ExecuteNonQuery(); } } 

在这里输入图像说明

在这里输入图像说明

我用下面的代码读取dt

 var dt = new DataTable(); string query = string.Format("SELECT * FROM [{0}]", sheetName); conn.Open(); OleDbDataAdapter adapter = new OleDbDataAdapter(query, conn); adapter.Fill(dt); 

我坚信你有数据的单元格和代码指向的单元格之间的混淆。 请仔细检查dt.Rows[0][j]所指的单元格。 看看错误发生时j的值是多less。 这将帮助您缩小问题范围。

如果包含以文本forms存储的数字,则该单元格不会在单元格上失败。 这是一个简单的方法来testing它。

创build一个Excel文件并保存为C:\MyFile.xlsx 。 在单元格A2中键入'1'将确保数字存储为文本。

在这里输入图像说明

现在,使用这个代码

  private void button1_Click(object sender, EventArgs e) { System.Data.OleDb.OleDbConnection Conn; Conn = new System.Data.OleDb.OleDbConnection( "provider=Microsoft.Ace.OLEDB.12.0;Data Source='C:\\MyFile.xlsx';Extended Properties=Excel 12.0 XML;"); var dt = new DataTable(); string query = string.Format("SELECT * FROM [{0}]", "Sheet1$"); Conn.Open(); OleDbDataAdapter adapter = new OleDbDataAdapter(query, Conn); adapter.Fill(dt); MessageBox.Show(dt.Rows[0][0].ToString()); } 

你会在消息框中得到1

在这里输入图像说明