C#从excel中导入数据到数据库怎么避免重复
我从excel中导入了些数据到数据库中,但是不知道怎么提示数据有重复。
只限一列的数据。
我写了个程序进行判断,但是总是不能实现,请大神帮帮忙!
SqlCommand comm = conn.CreateCommand();
comm.CommandText = "select ass_catid from assets"; //获取数据库内catid的内容
string d=comm.CommandText ;
com.Parameters["@固定资产类别ID"].Value = dt.Rows[i][j]; j++;
//对固定资产编号的判断
if (c != 11)
{
MessageBox.Show("数据长度错误,请仔细检查第" + r + "行" + 2 + "列!");
conn.Close();
}
else
{
if (dt.Rows [i][j].ToString ().Contains(d))
{
MessageBox.Show("与数据库数据有重复,请仔细检查第" + r + "行" + 2 + "列!");
conn.Close();
}
else
{
com.Parameters["@固定资产编号"].Value = dt.Rows[i][j];
}
}
c# excel 数据库
[解决办法]
DB数据查出来放在 DataTable 里,然后用
DataRow[] existsRow = DataTable.Select(string.Format("列='{0}'"));
if (existsRow != null && existsRow.Length > 0)
{
// 存在
}
[解决办法]
首先我不太清楚你的contains(d)是怎么搞出来的 我觉得你要查重的话还是要对每一个数据插入数据库操作的时候进行查重
public string InsertCar(DataTable dt)
{
string strOut = "";
int isImport=0, isRepeat=0, isBug=0,count=0;
foreach (DataRow dr in dt.Rows)
{
count += 1;
try
{
string Carname = dr["车名"].ToString();
string Carnum = dr["车牌号"].ToString();
string Deptname = dr["所属单位"].ToString();
string Carstate = dr["状态"].ToString();
string Cartype = dr["类型"].ToString();
string CarStandards = dr["规格"].ToString();
string Usedate = dr["启用时间"].ToString();
string Cannum = dr["可载人员"].ToString();
string Gysname = dr["供应商"].ToString();
string Gysphone = dr["供应商电话"].ToString();
string Driver = dr["驾驶员"].ToString();
string DriverPhone = dr["驾驶员号码"].ToString();
string Remark = dr["备注"].ToString();
string fenju = dr["所属分局"].ToString();
int fenjuid = 0;
int deptid = 0;
string sql_fenju = "select deptid from t_sys_dept where deptname = '" + fenju + "' ";
DataSet ds_fenju = DbHelperSQL.Query(sql_fenju);
if (ds_fenju.Tables[0].Rows.Count > 0)
{
fenjuid = int.Parse(ds_fenju.Tables[0].Rows[0][0].ToString());
//根据分局ID和部门名称查出部门id;
string sql_dept = "select deptid from t_sys_dept where parentdeptid = " + fenjuid + " and deptname like '%" + Deptname + "%'";
DataSet ds_dept = DbHelperSQL.Query(sql_dept);
if (ds_dept.Tables[0].Rows.Count > 0)
{
deptid = int.Parse(ds_dept.Tables[0].Rows[0][0].ToString());
}
}
string strSql = "insert into T_Transaction_car values('','" +
Carname + "','" + Carnum + "','" + Deptname + "','" + deptid + "','" + fenjuid + "','" + Carstate + "','" +
Cartype + "','" + CarStandards + "','" + Usedate + "','" + Cannum + "','" + Gysname + "','" + Gysphone + "','" +
Driver + "','" + DriverPhone + "','" + Remark + "',0)";
//通过车牌号字段查重
string strSqlcheck = "select * from T_Transaction_car where Carnum='" + Carnum + "'";
DataTable dtcheck = DbHelperSQL.Query(strSqlcheck).Tables[0];
if (dtcheck.Rows.Count == 0)
{
try
{
DbHelperSQL.ExecuteSql(strSql);
isImport++;
}
catch
{
isBug++;
strOut += count + " ";
continue;
}
}
else
{
isRepeat++;
continue;
}
}
catch
{
isBug++;
strOut += count + " ";
continue;
}
}
LogRecord.Record(CurUser.UserId, CurUser.TrueName, "批量导入", LogActionType.App, "批量导入装备数据" + dt.Rows.Count+"条,实际导入"+isImport+"条数据,车牌号重复数据"+isRepeat+"条,错误数据"+isBug+"条");
if(isBug>0)
{
return "批量导入数据" + dt.Rows.Count + "条,实际导入" + isImport + "条数据,车牌号重复数据" + isRepeat + "条,错误数据" + isBug + "条,其中错误项为以下几项" + strOut;
}
else
{
return "批量导入数据" + dt.Rows.Count+"条,实际导入"+isImport+"条数据,车牌号重复数据"+isRepeat+"条";
}
}
这个是我的代码你参考下 可能代码有点冗余,但是思路比较明确
[解决办法]
string d=comm.CommandText ;
d是你的sql语句啊。你这判断包含sql语句吗?
[解决办法]
string d=comm.CommandText ;
d不是你想要的数据
正确读取数据方式之一为:
con.Open();
OleDbCommand command = new OleDbCommand(SqlString, con);
OleDbDataReader reader = command.ExecuteReader();
while (reader.Read())
{
string data = reader.GetString(0);
}
这个data才是你想要的数据值。
你得再看看ado.net!