我正在尝试创建一个从现有数据库中获取结果的应用程序,将其附加到cvs文件中,然后将其推回到具有附加记录的数据库中。问题是我因此而得到了很多重复。
例如,假设我在我的数据库中有这个:
ID NAME
1 Jon
2 Jason
3 Adam
我的cvs看起来像这样:
ID NAME
1 Jon
2 Jason
3 Adam
4 Eva
5 Jack
然后我会在我的datagridview中得到这个:
ID NAME
1 Jon
2 Jason
3 Adam
1 Jon
2 Jason
3 Adam
4 Eva
5 Jack
如何防止它添加重复项?我已经有一些东西可以从cvs文件中删除重复项,但我不知道如何检查我从select语句获得的记录是否等于cvs文件中的记录。
这是我的代码,_docentid基本上就像上面的例子一样,对于_docentnaam是NAME同样如此
public partial class Form1 : Form
{
private readonly List<string> _docentid = new List<string>();
private readonly List<string> _docentnaam = new List<string>();
#region Members
private DataSet _myDataSet;
#endregion
public Form1()
{
InitializeComponent();
}
#region Properties
public DataSet MyDataSet
{
get { return _myDataSet ?? (_myDataSet = new DataSet()); }
}
#endregion
private void buttonGet_Click(object sender, EventArgs e)
{
StreamReader reader = new StreamReader(File.OpenRead(@"C:\Temp\exceltest.csv"));
while (!reader.EndOfStream)
{
string line = reader.ReadLine();
if (line == null) continue;
string[] values = line.Split(';');
_docentid.Add(values[4]);
_docentnaam.Add(values[5]);
}
SqlDataAdapter myDataAdapter = new SqlDataAdapter();
SqlCommand mySelectCommand = new SqlCommand
{
CommandText = "SELECT * FROM dbo.docent;",
CommandType = CommandType.Text
};
myDataAdapter.SelectCommand = mySelectCommand;
using (
SqlConnection cnn =
new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionPlain"].ConnectionString))
{
mySelectCommand.Connection = cnn;
myDataAdapter.Fill(MyDataSet);
}
int incr = 1;
foreach (string t in _docentnaam.Skip(1))
{
DataRow rw = MyDataSet.Tables[0].NewRow();
rw["docentid"] = Convert.ToInt32(_docentid[incr]);
rw["docentnaam"] = t;
if (!MyDataSet.Tables[0].Rows.Cast<DataRow>().Any(row => row["docentid"].Equals(rw["docentid"]) && row["docentnaam"].Equals(rw["docentnaam"])))
incr++;
}
dataGridViewPersons.DataSource = MyDataSet.Tables[0];
}