fcxxfcxx 2025-06-16 10:21 采纳率: 75%
浏览 7
已结题

值不能为空。 参数名: str

“/zhenxuesheng”应用程序中的服务器错误。
值不能为空。
参数名: str
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。

异常详细信息: System.ArgumentNullException: 值不能为空。
参数名: str

源错误:

行 58: OleDbDataAdapter myDa = new OleDbDataAdapter("select * from [Sheet1$]", cnnxls);
行 59: DataSet myDs = new DataSet();
行 60: myDa.Fill(myDs);
行 61:
行 62: if (myDs.Tables[0].Rows.Count > 0)

img

  • 写回答

5条回答 默认 最新

  • 宝码香车 优质创作者: JavaScript技术领域 2025-06-16 10:24
    关注

    让【宝码香车】来帮你解答,本回答参考DeepSeek编写,并整理提供。

    如果还有疑问可以点击头像关注私信或评论。如果答案让您满意,请采纳、点赞、关注,非常感谢!

    值不能为空错误分析

    根据错误信息和代码片段,这是一个典型的空值异常问题,发生在处理Excel文件上传和导入数据的过程中。

    错误原因

    错误信息显示System.ArgumentNullException: 值不能为空。参数名: str,这表明在代码中某个字符串参数被传递了空值。从堆栈跟踪来看,错误发生在myDa.Fill(myDs)这一行。

    问题分析

    1. 文件上传问题
      • 代码中多处拼写错误(如FileUipload1FilelploadlFilelane等)可能导致文件路径获取失败
      • 文件扩展名检查部分可能有逻辑错误
    1. 数据库连接问题
      • Excel连接字符串可能不正确
      • 文件路径可能为空
    1. 数据读取问题
      • Excel文件可能没有名为"Sheet1"的工作表
      • Excel文件内容可能为空

    修复建议

    // 修正后的代码片段
    string fullName = FileUpload1.FileName.ToString();
    string url = FileUpload1.PostedFile.FileName.ToString();
    string typ = fullName.Substring(fullName.LastIndexOf(".") + 1).ToLower();
    
    
    if (typ == "xls" || typ == "xlsx")
    {
        // 确保上传目录存在
        string uploadPath = Server.MapPath("~/upload/");
        if (!Directory.Exists(uploadPath))
        {
            Directory.CreateDirectory(uploadPath);
        }
        
        // 保存文件
        string filePath = Path.Combine(uploadPath, FileUpload1.FileName);
        FileUpload1.SaveAs(filePath);
        
        // 构建连接字符串(根据Excel版本)
        string connStr = typ == "xls" 
            ? $"Provider=Microsoft.Jet.OLEDB.4.0;Data Source={filePath};Extended Properties=\"Excel 8.0;HDR=YES;IMEX=1\"" 
            : $"Provider=Microsoft.ACE.OLEDB.12.0;Data Source={filePath};Extended Properties=\"Excel 12.0;HDR=YES;IMEX=1\"";
        
        using (OleDbConnection cnnxls = new OleDbConnection(connStr))
        {
            try
            {
                cnnxls.Open();
                DataTable schemaTable = cnnxls.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
                string sheetName = schemaTable.Rows[0]["TABLE_NAME"].ToString();
                
                OleDbDataAdapter myDa = new OleDbDataAdapter($"SELECT * FROM [{sheetName}]", cnnxls);
                DataSet myDs = new DataSet();
                myDa.Fill(myDs);
                
                // 后续数据处理...
            }
            catch (Exception ex)
            {
                Label1.Text = $"<script>alert('读取Excel失败: {ex.Message}');</script>";
            }
        }
    }
    

    数据导入流程

    开始

    注意事项

    1. 检查文件上传控件是否设置了runat="server"属性
    2. 确保IIS对上传目录有写入权限
    3. 服务器上需要安装适当的Excel数据提供程序(Jet或ACE)
    4. 处理Excel数据时建议添加异常处理
    5. 对于大型Excel文件,考虑分批次导入

    如果问题仍然存在,建议检查:

    • 上传的文件是否确实存在且可读
    • 服务器上是否安装了正确的OLEDB提供程序
    • 文件路径是否包含非法字符
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

问题事件

  • 系统已结题 6月24日
  • 已采纳回答 6月16日
  • 创建了问题 6月16日