Есть ли способ удалить старую запись, а затем вставить новую? У меня есть таблица Excel, и я использую OLEDB, а затем передаю ее команде SQL Server CE для вставки в .sdf
файл базы данных.
Я хочу удалить старую запись или обновить старую запись (намного лучше) , а затем вставить новую.
У меня есть данные в электронной таблице EmployeeLeaveHistory
, содержащей столбцы Emp_Num
и Emp_Name
Emp_Num | Emp_Name |
--------+----------+
12345 | anna |
12345 | anna |
23451 | jonalyn |
Используя oledb, он получит запись
int EmployeeNum;
string EmployeeName;
string constr = "";
string ext = Path.GetExtension(FileUpload1.FileName).ToLower();
string path = Server.MapPath("~/Excel/" + FileUpload1.FileName);
FileUpload1.SaveAs(path);
if (ext.Trim() == ".xls")
{
constr = "Povider=Microsoft.Jet.OLEDB.4.0; Data Source=" + path + ";Extended Properties=\"Excel.8.0;HDR=Yes;IMEX=2\"";
}
else if (ext.Trim() == ".xlsx")
{
constr = " Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path + ";Extended Properties=\"Excel 12.0;HDR=Yes;IMEX=2\"";
}
string query = "SELECT * FROM [EmployeeLeaveHistory$]";
using (OleDbConnection conn = new OleDbConnection(constr))
{
conn.Open();
using (OleDbCommand cmd2 = new OleDbCommand(query, conn))
{
using (OleDbDataReader dr2 = cmd2.ExecuteReader())
{
while (dr2.Read())
{
EmployeeNum = Convert.ToInt32(dr2["Emp_Num"]);
EmployeeName = Convert.ToString(dr2["Emp_Name"]);
SaveLeave(EmployeeNum, EmployeeName);
}
}
}
}
}
Затем у меня есть личная пустая папка SaveLeave, которая будет перехватывать запись из oledb и вставлять ее в мой файл .sdf
.
private void SaveLeave(Int32 EmployeeNum, string EmployeeName)
{
string constring = ConfigurationManager.ConnectionStrings["Connection"].ConnectionString;
string check = "SELECT COUNT(*) FROM EMPLOYEELEAVEHISTORY WHERE Id=@@IDENTITY";
string update = "UPDATE EMPLOYEELEAVEHISTORY SET EmployeeName=@EmployeeName WHERE EmployeeNum=@EmployeeNum;";
string insert = "INSERT INTO EMPLOYEELEAVEHISTORY(EmployeeNum, EmployeeName) VALUES (@EmployeeNum, @EmployeeName);";
using (SqlCeConnection con = new SqlCeConnection(constring))
{
con.Open();
using (SqlCeCommand cmd = new SqlCeCommand(check, con))
{
cmd.Parameters.AddWithValue("@EmployeeNum", EmployeeNum);
using (SqlCeDataReader read = cmd.ExecuteReader())
{
read.Read();
int count = read.GetInt32(0);
if (count > 0)
{
using (SqlCeCommand upt = new SqlCeCommand(update))
{
upt.Parameters.AddWithValue("@EmployeeNum", EmployeeNum);
upt.Parameters.AddWithValue("@NoOfDays", NoOfDays);
upt.Connection = con;
upt.ExecuteNonQuery();
}
}
else
{ using (SqlCeCommand inst = new SqlCeCommand(insert))
{
inst.Parameters.AddWithValue("@EmployeeNum", EmployeeNum);
inst.Parameters.AddWithValue("@EmployeeName", EmployeeName);
inst.Connection = con;
inst.ExecuteNonQuery();
}
}
}
}
}
}
Если я использую оператор Delete, последняя строка записи Excel, которая является 23451|jonalyn|
, является единственной, которая вставляется в файл sdf. Сейчас я использую оператор обновления, но проблема в том, что когда я использую оператор обновления, запись не обновляется, но она дублирует запись, также, если я добавляю еще одну запись в моем Excel следующим образом:
Emp_Num | Emp_Name |
--------+----------+
12345 | anna |
12345 | anna |
23451 | jonalyn |
12 | jade |
И используйте запрос вставки для моего .sdf
, запись в моем .sdf
становится такой:
EmployeeNum | EmployeeName |
------------+--------------+
12345 | anna |
12345 | anna |
23451 | jonalyn |
12345 | anna |
12345 | anna |
23451 | jonalyn |
12 | jade |
Кто-нибудь может мне помочь? СПАСИБО