C# OLEDB读取EXCEL的数据为空值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C# OLEDB读取EXCEL的数据为空值相关的知识,希望对你有一定的参考价值。

Excel内容大致如下:
Name Number
AAA 123
BBB 456
CCC C123
DDD Y456

使用OleDB连接Excel后,读前两行都没问题,第三行只读除了Name(CCC),Number读出是空值,这个空值的问题,是什么情况?该怎么解决?请高手指教

你的读取语句放出来,看看,应该是你的数据类型没有搞对 参考技术A 在excel中,前第二列的前两个数据,前边加上一个单引号,这样是为了转成文本

AAA '123
BBB '456
参考技术B 数据类型是什么,number列里有字符,你看看是什么类型

C#读取Excel的其中一种方式OleDb读取(100万条)--快速大量插入SQL中

主要运用表类型

 1 Create table BulkTestTable( 
 2 Id nvarchar(32), 
 3 UserName nvarchar(32), 
 4 Pwd nvarchar(32)
 5 )
 6 Go
 7 CREATE TYPE BulkUdt AS TABLE 
 8 (Id nvarchar(32), 
 9 UserName nvarchar(32), 
10 Pwd nvarchar(32) )
View Code

C#端读取Excel

    /// <summary>
        /// 读取Excel中数据
        /// </summary>
        /// <param name="strExcelPath"></param>
        /// <param name="tableName"></param>
        /// <returns></returns>
        public DataTable GetExcelTableByOleDB(string strExcelPath, string tableName)
         {
             try
             {
                 DataTable dtExcel = new DataTable();
                 //数据表
                 DataSet ds = new DataSet();
                 //获取文件扩展名
                 string strExtension = System.IO.Path.GetExtension(strExcelPath);
                 string strFileName = System.IO.Path.GetFileName(strExcelPath);
                 //Excel的连接
                 OleDbConnection objConn = null;
                 switch (strExtension)
                 {
                     case ".xls":
                         objConn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + strExcelPath + ";" + "Extended Properties=\\"Excel 8.0;HDR=NO;IMEX=1;\\"");
                         break;
                     case ".xlsx":
                         objConn = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + strExcelPath + ";" + "Extended Properties=\\"Excel 12.0;HDR=NO;IMEX=1;\\"");
                         break;
                     default:
                         objConn = null;
                         break;
                 }
                 if (objConn == null)
                 {
                     return null;
                 }
                 objConn.Open();
                 //获取Excel中所有Sheet表的信息
                 //System.Data.DataTable schemaTable = objConn.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables, null);
                 //获取Excel的第一个Sheet表名
                // string tableName1 = schemaTable.Rows[0][2].ToString().Trim();
                 string strSql = "select * from [" + tableName + "$]";
                 //获取Excel指定Sheet表中的信息
                 OleDbCommand objCmd = new OleDbCommand(strSql, objConn);
                 OleDbDataAdapter myData = new OleDbDataAdapter(strSql, objConn);
                 myData.Fill(ds, tableName);//填充数据
                 objConn.Close();
                 //dtExcel即为excel文件中指定表中存储的信息
                 dtExcel = ds.Tables[tableName];
                 return dtExcel;
             }
             catch(Exception ex)
             {
                 MessageBox.Show(ex.Message);
                 return null;
             }
           
         }

  C#端插入到sql表中

 /// <summary>
        /// 导入msSql
        /// </summary>
        /// <param name="?"></param>
        /// <returns></returns>
        public int ExcelToMsSQL(string tablename,DataTable dt)
        {

          int count = 0;

            string Connstr = "Data Source=;Initial Catalog=;Persist Security Info=True;User ID=;Password=";
            SqlConnection sqlConn = new SqlConnection(Connstr); 
            const string TSqlStatement =
    "insert into BulkTestTable (Id,UserName,Pwd)" +
    " SELECT nc.Id, nc.UserName,nc.Pwd" +
    " FROM @NewBulkTestTvp AS nc";
            SqlCommand cmd = new SqlCommand(TSqlStatement, sqlConn);
            SqlParameter catParam = cmd.Parameters.AddWithValue("@NewBulkTestTvp", dt);
            catParam.SqlDbType = SqlDbType.Structured;
            //表值参数的名字叫BulkUdt,在上面的建立测试环境的SQL中有。  
            catParam.TypeName = "dbo.BulkUdt";
            try
            {
                sqlConn.Open();
                if (dt != null && dt.Rows.Count != 0)
                {
                  count =  cmd.ExecuteNonQuery();
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                sqlConn.Close();
            }  
 

          
            return count ;
        }

  

以上是关于C# OLEDB读取EXCEL的数据为空值的主要内容,如果未能解决你的问题,请参考以下文章

无法从 C# 中的 excel 文件中读取数值

C#调用OleDbConnection类读取Excel表格时,报错外部组件发生异常!

C#读取excel等表格常用方法

SSIS读取Excel空值问题解决

C# 读取EXCEL文件的三种经典方法

C# 读取EXCEL文件的三种经典方法