C# 在Visual Studio Development works中上载文件时,而不是在网站发布时
我有一个页面,用户可以上传一个csv文件,然后保存在数据库中并显示在gridview中。在开发站点时,这一切都可以正常工作,但是当我将站点发布到IIS并从外部访问它时,在尝试上载文件时,会出现“500 internal server error”错误 这是我用来上传文件的代码:C# 在Visual Studio Development works中上载文件时,而不是在网站发布时,c#,iis,C#,Iis,我有一个页面,用户可以上传一个csv文件,然后保存在数据库中并显示在gridview中。在开发站点时,这一切都可以正常工作,但是当我将站点发布到IIS并从外部访问它时,在尝试上载文件时,会出现“500 internal server error”错误 这是我用来上传文件的代码: private string GetConnectionString() { return ConfigurationManager.ConnectionStrings["OfficeConnection"].C
private string GetConnectionString()
{
return ConfigurationManager.ConnectionStrings["OfficeConnection"].ConnectionString;
}
private void CreateDatabaseTable(DataTable dt, string tableName)
{
string sqlQuery = string.Empty;
string sqlDBType = string.Empty;
string dataType = string.Empty;
StringBuilder sb = new StringBuilder();
sb.AppendFormat(string.Format("CREATE TABLE {0} (", tableName));
for (int i = 0; i < dt.Columns.Count; i++)
{
int maxLength = 0;
dataType = dt.Columns[i].DataType.ToString();
if (dataType == "System.Int32")
{
sqlDBType = "INT";
}
else if (dataType == "System.String")
{
sqlDBType = "NVARCHAR";
maxLength = dt.Columns[i].MaxLength;
}
else
{
//do something else
}
if (maxLength > 0)
sb.AppendFormat(string.Format("{0} {1} ({2}), ", dt.Columns[i].ColumnName, sqlDBType, maxLength));
else
sb.AppendFormat(string.Format("{0} {1},", dt.Columns[i].ColumnName, sqlDBType));
}
sqlQuery = sb.ToString();
sqlQuery = sqlQuery.Trim().TrimEnd(',');
sqlQuery = sqlQuery + " )";
using (SqlConnection sqlConn = new SqlConnection(GetConnectionString()))
{
sqlConn.Open();
using (SqlCommand sqlCmd = new SqlCommand(sqlQuery, sqlConn))
{
sqlCmd.ExecuteNonQuery();
sqlConn.Close();
}
}
}
private void LoadDataToDatabase(string tableName, string fileFullPath, string delimeter)
{
string sqlQuery = string.Empty;
StringBuilder sb = new StringBuilder();
sb.AppendFormat(string.Format("BULK INSERT {0} ", tableName));
sb.AppendFormat(string.Format(" FROM '{0}'", fileFullPath));
sb.AppendFormat(string.Format(" WITH ( FIELDTERMINATOR = '{0}' , ROWTERMINATOR = '\n' )", delimeter));
sqlQuery = sb.ToString();
using (SqlConnection sqlConn = new SqlConnection(GetConnectionString()))
{
sqlConn.Open();
using (SqlCommand sqlCmd = new SqlCommand(sqlQuery, sqlConn))
{
sqlCmd.ExecuteNonQuery();
sqlConn.Close();
}
}
}
private void UploadAndProcessFile()
{
if (FileUpload1.HasFile)
{
FileInfo fileInfo = new FileInfo(FileUpload1.PostedFile.FileName);
if (fileInfo.Name.Contains(".csv"))
{
string fileName = fileInfo.Name.Replace(".csv", "").ToString();
string csvFilePath = Server.MapPath("UploadedCSVFiles") + "\\" + fileInfo.Name;
//Save the CSV file in the Server inside 'UploadedCSVFiles'
FileUpload1.SaveAs(csvFilePath);
//Fetch the location of CSV file
string filePath = Server.MapPath("UploadedCSVFiles") + "\\";
string strSql = string.Format("SELECT * FROM [{0}]", fileInfo.Name);
string strCSVConnString = string.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties='text;HDR=YES;'", filePath);
// load the data from CSV to DataTable
DataTable dtCSV = new DataTable();
DataTable dtSchema = new DataTable();
using (OleDbDataAdapter adapter = new OleDbDataAdapter(strSql, strCSVConnString))
{
adapter.FillSchema(dtCSV, SchemaType.Mapped);
adapter.Fill(dtCSV);
}
if (dtCSV.Rows.Count > 0)
{
CreateDatabaseTable(dtCSV, fileName);
Label2.Text = string.Format("The table ({0}) has been successfully created to the database.", fileName);
string fileFullPath = filePath + fileInfo.Name;
LoadDataToDatabase(fileName, fileFullPath, ",");
Label1.Text = string.Format("({0}) records has been loaded to the table {1}.", dtCSV.Rows.Count, fileName);
}
else
{
lblError.Text = "File is empty.";
}
}
else
{
lblError.Text = "Unable to recognize file.";
}
}
}
protected void btnImport_Click(object sender, EventArgs e)
{
UploadAndProcessFile();
}
私有字符串GetConnectionString()
{
返回ConfigurationManager.ConnectionString[“OfficeConnection”].ConnectionString;
}
私有void CreateDatabaseTable(DataTable dt,string tableName)
{
string sqlQuery=string.Empty;
string sqlDBType=string.Empty;
字符串数据类型=string.Empty;
StringBuilder sb=新的StringBuilder();
AppendFormat(string.Format(“创建表{0}(,tableName));
对于(int i=0;i0)
sb.AppendFormat(string.Format(“{0}{1}({2})”),dt.Columns[i].ColumnName,sqlDBType,maxLength));
其他的
sb.AppendFormat(string.Format(“{0}{1},”,dt.Columns[i].ColumnName,sqlDBType));
}
sqlQuery=sb.ToString();
sqlQuery=sqlQuery.Trim().TrimEnd(',');
sqlQuery=sqlQuery+”;
使用(SqlConnection sqlConn=newsqlconnection(GetConnectionString()))
{
sqlConn.Open();
使用(SqlCommand sqlCmd=newsqlcommand(sqlQuery,sqlConn))
{
sqlCmd.ExecuteNonQuery();
sqlConn.Close();
}
}
}
私有void LoadDataToDatabase(字符串tableName、字符串fileFullPath、字符串delimeter)
{
string sqlQuery=string.Empty;
StringBuilder sb=新的StringBuilder();
sb.AppendFormat(string.Format(“大容量插入{0}”,tableName));
sb.AppendFormat(string.Format(“FROM'{0}',fileFullPath));
sb.AppendFormat(string.Format(“WITH(FIELDTERMINATOR='{0}',rowdterminator='\n')”,delimeter));
sqlQuery=sb.ToString();
使用(SqlConnection sqlConn=newsqlconnection(GetConnectionString()))
{
sqlConn.Open();
使用(SqlCommand sqlCmd=newsqlcommand(sqlQuery,sqlConn))
{
sqlCmd.ExecuteNonQuery();
sqlConn.Close();
}
}
}
私有void UploadProcessFile()
{
if(FileUpload1.HasFile)
{
FileInfo FileInfo=newfileinfo(FileUpload1.PostedFile.FileName);
if(fileInfo.Name.Contains(“.csv”))
{
字符串文件名=fileInfo.Name.Replace(“.csv”,”).ToString();
字符串csvFilePath=Server.MapPath(“UploadedCSVFiles”)+“\\”+fileInfo.Name;
//将CSV文件保存在“UploadedCSVFiles”内的服务器中
FileUpload1.SaveAs(csvFilePath);
//获取CSV文件的位置
字符串filePath=Server.MapPath(“UploadedCSVFiles”)+“\\”;
string strSql=string.Format(“SELECT*FROM[{0}]”,fileInfo.Name);
string strcscsconnstring=string.Format(“Provider=Microsoft.Jet.OLEDB.4.0;数据源={0};扩展属性='text;HDR=YES;'”,文件路径);
//将数据从CSV加载到DataTable
DataTable dtCSV=新的DataTable();
DataTable dtSchema=新DataTable();
使用(OleDbDataAdapter=新的OleDbDataAdapter(strSql,strCSVConnString))
{
FillSchema(dtCSV,SchemaType.Mapped);
适配器填充(dtCSV);
}
如果(dtCSV.Rows.Count>0)
{
CreateDatabaseTable(dtCSV,文件名);
Label2.Text=string.Format(“表({0})已成功创建到数据库。”,文件名);
字符串fileFullPath=filePath+fileInfo.Name;
LoadDataToDatabase(文件名,fileFullPath,“,”);
Label1.Text=string.Format(“({0})记录已加载到表{1}.”,dtCSV.Rows.Count,fileName);
}
其他的
{
lblError.Text=“文件为空。”;
}
}
其他的
{
lblError.Text=“无法识别文件。”;
}
}
}
受保护的无效btnImport\u单击(对象发送方,事件参数e)
{
UploadAndProcessFile();
}
这是IIS中需要更改的设置吗?我已经检查了网站的许可,一切都很好
感谢了解如何捕获未处理的异常,然后您将看到原因。您能否共享您尝试上载的文件的大小?iis默认文件上载大小限制为4 MB。