Asp.net 如何使用上载的文件用excel文件更新sql数据库表信息

Asp.net 如何使用上载的文件用excel文件更新sql数据库表信息,asp.net,sql,excel,Asp.net,Sql,Excel,我正在尝试更新我创建的表中的文件。我使用文件上传器插入我的Excel文件并上传到数据库。但目前我的代码在每次上传文件时都会创建一个新的数据库表,我不希望这样做。我只想更新/替换数据库表中的整个文件。我该怎么做 这是我的代码: private string GetConnectionString() { return System.Configuration.ConfigurationManager.ConnectionStrings["nConnecti

我正在尝试更新我创建的表中的文件。我使用文件上传器插入我的Excel文件并上传到数据库。但目前我的代码在每次上传文件时都会创建一个新的数据库表,我不希望这样做。我只想更新/替换数据库表中的整个文件。我该怎么做

这是我的代码:

private string GetConnectionString()
     {
                return System.Configuration.ConfigurationManager.ConnectionStrings["nConnectionString2"].ConnectionString;
     }
     private void CreateDatabaseTable(DataTable dt, string tableName)
     {

                string sqlQuery = string.Empty;
                string sqlDBType = string.Empty;
                string dataType = string.Empty;
                int maxLength = 0;
                StringBuilder sb = new StringBuilder();

                sb.AppendFormat(string.Format("CREATE TABLE {0} (", tableName));

                for (int i = 0; i < dt.Columns.Count; i++)
                {
                    dataType = dt.Columns[i].DataType.ToString();
                    if (dataType == "System.Int32")
                    {
                        sqlDBType = "INT";
                    }
                    else if (dataType == "System.String")
                    {
                       sqlDBType = "NVARCHAR";
                        maxLength = dt.Columns[i].MaxLength;
                    }

                    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();
                    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();
                  SqlCommand sqlCmd = new SqlCommand(sqlQuery, sqlConn);
                  sqlCmd.ExecuteNonQuery();
                  sqlConn.Close();
                }
           }

    protected void btnImport_Click(object sender, EventArgs e)
    {
        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("UploadExcelFile") + "\\" + fileInfo.Name;

                        //Save the CSV file in the Server inside 'MyCSVFolder' 
                        FileUpload1.SaveAs(csvFilePath);

                       //Fetch the location of CSV file 
                       string filePath = Server.MapPath("UploadExcelFile") + "\\";
                       string strSql = "SELECT * FROM [" + fileInfo.Name + "]";
                       string strCSVConnString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filePath + ";" + "Extended Properties='text;HDR=YES;'";

                       // load the data from CSV to DataTable 

                       OleDbDataAdapter adapter = new OleDbDataAdapter(strSql, strCSVConnString);
                       DataTable dtCSV = new DataTable();
                       DataTable dtSchema = new DataTable();

                       adapter.FillSchema(dtCSV, SchemaType.Mapped);
                       adapter.Fill(dtCSV);

                       if (dtCSV.Rows.Count > 0)
                       {
                           CreateDatabaseTable(dtCSV, fileName);
                           Label1.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
                       {
                           Label1.Text = "File is empty.";
                      }
                  }
                   else
                   {
                       Label1.Text = "Unable to recognize file.";
                  }

             }
           }
私有字符串GetConnectionString()
{
返回System.Configuration.ConfigurationManager.ConnectionString[“nConnectionString”].ConnectionString;
}
私有void CreateDatabaseTable(DataTable dt,string tableName)
{
string sqlQuery=string.Empty;
string sqlDBType=string.Empty;
字符串数据类型=string.Empty;
int maxLength=0;
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=新的SqlCommand(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=新的SqlCommand(sqlQuery,sqlConn);
sqlCmd.ExecuteNonQuery();
sqlConn.Close();
}
}
受保护的无效btnImport\u单击(对象发送方,事件参数e)
{
if(FileUpload1.HasFile)
{
FileInfo FileInfo=newfileinfo(FileUpload1.PostedFile.FileName);
if(fileInfo.Name.Contains(“.csv”))
{
字符串文件名=fileInfo.Name.Replace(“.csv”,”).ToString();
字符串csvFilePath=Server.MapPath(“UploadExcelFile”)+“\\”+fileInfo.Name;
//将CSV文件保存在“MyCSVFolder”内的服务器中
FileUpload1.SaveAs(csvFilePath);
//获取CSV文件的位置
字符串filePath=Server.MapPath(“UploadExcelFile”)+“\\”;
string strSql=“SELECT*FROM[”+fileInfo.Name+“]”;
字符串strcscsconnstring=“Provider=Microsoft.Jet.OLEDB.4.0;数据源=“+filePath+”;“+”扩展属性=“text;HDR=YES;”;
//将数据从CSV加载到DataTable
OleDbDataAdapter=新的OleDbDataAdapter(strSql,strCSVConnString);
DataTable dtCSV=新的DataTable();
DataTable dtSchema=新DataTable();
FillSchema(dtCSV,SchemaType.Mapped);
适配器填充(dtCSV);
如果(dtCSV.Rows.Count>0)
{
CreateDatabaseTable(dtCSV,文件名);
Label1.Text=string.Format(“表({0})已成功创建到数据库。”,文件名);
字符串fileFullPath=filePath+fileInfo.Name;
LoadDataToDatabase(文件名,fileFullPath,“,”);
Label1.Text=string.Format(“({0})记录已加载到表{1}.”,dtCSV.Rows.Count,fileName);
}
其他的
{
Label1.Text=“文件为空。”;
}
}
其他的
{
Label1.Text=“无法识别文件。”;
}
}
}

如果表已经存在,则创建表的代码在运行时应该给出一个错误,因为您从未删除它们

也就是说,一种解决方案可能是添加一个检查,以查看创建新表的代码中是否已经存在该表;应该是这样的:
如果OBJECT_ID('TABLE','U')为空
其中
TABLE
将显示要添加的表的名称,因此代码可能如下所示:

sb.AppendFormat(string.Format("IF OBJECT_ID({0}, 'U') IS NULL CREATE TABLE {0} (", tableName));
另一个可能更好的选择是运行