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