导入前检查excel文件内容

时间:2011-12-08 07:54:49

标签: c# asp.net sql

我正在使用VS2005 C#ASP.NET和SQL Server 2005。

我有一个导入Excel数据的功能。我遇到了一种情况,当里面的数据不合适时,它会关闭SQL Server数据库。

E.g。从[userlist $]中选择[用户名],[密码] - >如果Excel电子表格在一列中包含多于[用户名]或在列下方包含值,则服务器将崩溃。

E.G。 enter image description here

我可以知道在上传之前如何查看此文件错误的声明?首选if else语句进行检查。

感谢您提供任何帮助或示例。

以下是我的Excel上传代码段:

if (FileImport.HasFile)
    {

        // Get the name of the Excel spreadsheet to upload. 
        string strFileName = Server.HtmlEncode(FileImport.FileName);

        // Get the extension of the Excel spreadsheet. 
        string strExtension = Path.GetExtension(strFileName);

        // Validate the file extension. 
        if (strExtension == ".xls" || strExtension == ".xlsx")
        {
                // Generate the file name to save. 
                string strUploadFileName = "C:/Documents and Settings/user01/My Documents/Visual Studio 2005/WebSites/MajorProject/UploadFiles/" + DateTime.Now.ToString("yyyyMMddHHmmss") + strExtension;

                // Save the Excel spreadsheet on server. 
                FileImport.SaveAs(strUploadFileName);

                // Create Connection to Excel Workbook
                string connStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + strUploadFileName + ";Extended Properties=Excel 8.0;";

                using (OleDbConnection connection =
                             new OleDbConnection(connStr))
                {
                    string selectStmt = string.Format("Select [COLUMNS]  FROM [userlist$]");

                    OleDbCommand command = new OleDbCommand(selectStmt, connection);

                    connection.Open();
                    Console.WriteLine("Connection Opened");
                    // Create DbDataReader to Data Worksheet
                    using (DbDataReader dr = command.ExecuteReader())
                    {
                        // SQL Server Connection String
                        string sqlConnectionString = "Data Source=<datasource>";

                        // Bulk Copy to SQL Server
                        using (SqlBulkCopy bulkCopy =
                                   new SqlBulkCopy(sqlConnectionString))
                        {
                            bulkCopy.DestinationTableName = "UserDB";
                            bulkCopy.WriteToServer(dr);
                            return;
                        }
                    }
                }

2 个答案:

答案 0 :(得分:0)

例如,根据Excel电子表格中的数据量,您可以将您感兴趣的列中的每个值读入字典,并在发现第一个冲突时立即失败导入。

例如,使用现有的datareeader:

Dictionary<string, string> cValues = new Dictionary<string, string>();

// Create DbDataReader to Data Worksheet
using (DbDataReader dr = command.ExecuteReader())
{
   while (dr.Read()) {
      string sValue = dr[0].ToString();
      if (cValue.ContainsKey(sValue)) {
         // There is a duplicate value, so bail
         throw new Exception("Duplicate value " + sValue);
      } else {
         cValues.Add(sValue, sValue);
      }
   }
}

// Now execute the reader on the command again to perform the upload
using (DbDataReader dr = command.ExecuteReader())

答案 1 :(得分:0)

您应该解决问题的原因,即数据库。显然,存储数据的方式应该是通过处理错误输入数据的存储过程。

此外,对数据库表的约束应禁止您存储非敏感数据。