我正在使用VS2005 C#ASP.NET和SQL Server 2005。
我有一个导入Excel数据的功能。我遇到了一种情况,当里面的数据不合适时,它会关闭SQL Server数据库。
E.g。从[userlist $]中选择[用户名],[密码] - >如果Excel电子表格在一列中包含多于[用户名]或在列下方包含值,则服务器将崩溃。
E.G。
我可以知道在上传之前如何查看此文件错误的声明?首选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;
}
}
}
答案 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)
您应该解决问题的原因,即数据库。显然,存储数据的方式应该是通过处理错误输入数据的存储过程。
此外,对数据库表的约束应禁止您存储非敏感数据。