Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在Visual Studio Development works中上载文件时,而不是在网站发布时_C#_Iis - Fatal编程技术网

C# 在Visual Studio Development works中上载文件时,而不是在网站发布时

C# 在Visual Studio Development works中上载文件时,而不是在网站发布时,c#,iis,C#,Iis,我有一个页面,用户可以上传一个csv文件,然后保存在数据库中并显示在gridview中。在开发站点时,这一切都可以正常工作,但是当我将站点发布到IIS并从外部访问它时,在尝试上载文件时,会出现“500 internal server error”错误 这是我用来上传文件的代码: private string GetConnectionString() { return ConfigurationManager.ConnectionStrings["OfficeConnection"].C

我有一个页面,用户可以上传一个csv文件,然后保存在数据库中并显示在gridview中。在开发站点时,这一切都可以正常工作,但是当我将站点发布到IIS并从外部访问它时,在尝试上载文件时,会出现“500 internal server error”错误

这是我用来上传文件的代码:

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。