我有一个文件上传器,可将excel文件上传到MySQL服务器中的数据库。文件上传器工作正常,我还制作了一个网格视图,该视图将在下面的部分中显示所有上传文件的历史记录。
现在,我正在尝试开发一些代码,以使文件上传器能够检查数据库,以了解上传的文件何时有重复的行,并询问用户是否要将旧记录替换为新记录。
注意:重复项不是100%相等。例如,在这种情况下,重复项将具有相同的ID,年份和月份,但值不同。换句话说,尽管有该值,但在特定的年份和月份中只能有一个ID。
这是我到目前为止所拥有的。将不确定的代码标记为注释,以便实现我提到的内容。
protected void Button1_Click(object sender, EventArgs e)
{
String sID_VARIAVEL;
int sANO;
int sMES;
int sCOD_DATA;
String sINSTALACAO;
String sVALOR;
string path = Path.GetFileName(FileUpload1.FileName);
path = path.Replace(" ", "");
FileUpload1.SaveAs(Server.MapPath("~/Upload/") + path);
String ExcelPath = Server.MapPath("~/Upload/") + path;
OleDbConnection mycon = new OleDbConnection("Provider = Microsoft.ACE.OLEDB.12.0; Data Source = " + ExcelPath + "; Extended Properties=Excel 8.0; Persist Security Info = False");
mycon.Open();
OleDbCommand cmd = new OleDbCommand("select * from [Sheet1$]", mycon);
OleDbDataReader dr = cmd.ExecuteReader();
while (dr.Read())
{
sID_VARIAVEL = dr[0].ToString();
sANO = Convert.ToInt32(dr[1].ToString());
sMES = Convert.ToInt32(dr[2].ToString());
sCOD_DATA = Convert.ToInt32(dr[3].ToString());
sINSTALACAO = dr[4].ToString();
sVALOR = dr[5].ToString();
savedata(sID_VARIAVEL, sANO, sMES, sCOD_DATA, sINSTALACAO, sVALOR);
/*String query = "SELECT * FROM VALOR WHERE ID_VARIAVEL = '" + sID_VARIAVEL + "' AND ANO = '" + sANO + "' AND MES = '" + sMES + "' ";
Boolean parsedquery;
String myconn = "Data Source=agrsql004\\instance01; Initial Catalog=TrainingDB; User id=SQLLOCAL; Password=123456";
SqlConnection conn = new SqlConnection(myconn);
conn.Open();
SqlCommand command = new SqlCommand();
command.CommandText = query;
command.Connection = conn;
command.ExecuteNonQuery();
SqlDataReader reader = command.ExecuteReader();
if ()
{
DialogResult result = MessageBox.Show("????", "Confirmation", MessageBoxButtons.YesNoCancel);
}*/
}
DataTable dt = new DataTable();
dt.Columns.Add("File", typeof(string));
dt.Columns.Add("Size", typeof(string));
dt.Columns.Add("Type", typeof(string));
dt.Columns.Add("YourDateField", typeof(DateTime));
foreach (string strFile in Directory.GetFiles(Server.MapPath("~/Upload/")))
{
FileInfo fi = new FileInfo(strFile);
dt.Rows.Add(fi.Name, fi.Length, GetFileTypeByExtension(fi.Extension), fi.CreationTime);
}
GridView1.DataSource = dt;
GridView1.DataBind();
}
private void savedata(String sID_VARIAVEL1, int sANO1, int sMES1, int sCOD_DATA1, String sINSTALACAO1, String sVALOR1)
{
String query = "insert into VALOR (ID_VARIAVEL, ANO, MES, COD_DATA, INSTALACAO, VALOR) values('" + sID_VARIAVEL1 + "','" + sANO1 + "','" + sMES1 + "','" + sCOD_DATA1 + "','" + sINSTALACAO1 + "','" + sVALOR1 + "')";
String mycon = "Data Source=agrsql004\\instance01; Initial Catalog=TrainingDB; User id=SQLLOCAL; Password=123456";
SqlConnection con = new SqlConnection(mycon);
con.Open();
SqlCommand cmd = new SqlCommand();
cmd.CommandText = query;
cmd.Connection = con;
cmd.ExecuteNonQuery();
}
答案 0 :(得分:1)
这只是查看数据的替代方式。老实说,我不喜欢.xlx文档,因此我倾向于使用.csv或.txt(制表符或逗号分隔)。另外,我们通常在软件中不使用NUGET软件包,因此,那些不错的Excel转换器不是一个选择(尽管它们可能适合您)。您可以为Excel文档更改此设置。我最初是用VB编写的,因此必须将其转换为C#。
using System;
using System.IO;
using System.Text;
using System.Data;
using System.Collections.ObjectModel;
private DataTable _dt;
private Collection<int> _rowsNeedUpdated;
public void TestFunction()
{
string[] lines = File.ReadAllLines(Server.MapPath("~/Files/ImportData_TabDelimited.txt"), Encoding.UTF8);
bool isFirstLine = true;
foreach (string line in lines)
{
if (isFirstLine)
{
string[] headers = line.Split('\t');
foreach (string header in headers)
{
// dont want any whitespaces
_dt.Columns.Add(header.Replace(" ", ""));
}
isFirstLine = false;
continue;
}
string[] items = line.Split('\t');
DataRow row = _dt.NewRow();
for (int i = 0; i < _dt.Columns.Count; i++)
{
row[_dt.Columns[i].ColumnName] = items[i];
}
_dt.Rows.Add(row);
}
// these are just methods of getting specific row data (similar to a SQL WHERE clause)
DataRow[] rows = _dt.Select("ID_VARIAVEL = '5'");
DataRow[] rows2 = _dt.Select(String.Format("ID_VARIAVEL LIKE '%{0}%' AND ANO = '1'", "formattedString"));
for (int i = 0; i < _dt.Rows.Count; i++)
{
// get each datarow item
// example
string id = (string)_dt.Rows[i]["columnName"];
// execute SQL query and check the return value based on my previous comments
// if it needs to be updated, capture the row to update later
_rowsNeedUpdated.Add(i);
}
}