我有以下代码用于从文件中读取并填充我的数据库。除了所有记录都插入两次之外,一切正常。
OleDbCommand c = new OleDbCommand();
c.Connection = GetConnection();
c.CommandText =
@"CREATE TABLE patients (
patientid AUTOINCREMENT PRIMARY KEY,
firstlastname CHAR(50),
birthdate CHAR(50),
birthplace CHAR(50),
gender CHAR(1),
bloodtype CHAR(50),
telnum CHAR(50),
address CHAR(255)
)";
c.ExecuteNonQuery();
string info = "";
string name = "";
string date = "";
string place = "";
string blood = "";
string num = "";
string address = "";
//Read from file and insert values to patient table
StreamReader myReader = new StreamReader("myPath/patient.txt");
while (true)
{
info = myReader.ReadLine();
if (info == null) break;
if (info.Trim() != String.Empty)
{
string[] words = info.Split(',');
if (words.Length == 6)
{
name = words[0].Trim();
date = words[1].Trim();
place = words[2];
blood = words[3];
num = words[4];
address = words[5];
}
}
string cmdText = "INSERT INTO patients (" +
"firstlastname, birthdate, birthplace, bloodtype, telnum, address) " +
"VALUES (?,?,?,?,?,?)";
using (OleDbConnection cn = GetConnection())
{
using (OleDbCommand cmd = new OleDbCommand(cmdText, cn))
{
cmd.Parameters.AddWithValue("name", name);
cmd.Parameters.AddWithValue("date", date);
cmd.Parameters.AddWithValue("place", place);
cmd.Parameters.AddWithValue("blood", blood);
cmd.Parameters.AddWithValue("num", num);
cmd.Parameters.AddWithValue("address", address);
cmd.ExecuteNonQuery();
}
}
}
我注意到这条线
if (info.Trim() != String.Empty)
每隔一段时间就返回“false”,因此记录会插入两次,但不知道如何解决此问题。
如何消除这些重复项? 谢谢
编辑:文件内容显示姓名、日期、城市、血型、手机号码和地址:
Mehtap Selim,1985 年 11 月 6 日,凯里尼亚,FBRh+,05617584509,Yasemin St. No:48 Edremit Kyrenia KKTC
最佳答案
看起来,即使条件语句为假,您的代码结构仍然允许写入数据库,并且由于数据仍在上次写入的变量中,因此它会再次写入它们。尝试将数据库写入包含在相同的条件中。至于为什么每次都会出现错误,我们需要查看您的文件的内容。
即
if (info.Trim() != String.Empty)
{
string[] words = info.Split(',');
if (words.Length == 6)
{
name = words[0].Trim();
date = words[1].Trim();
place = words[2];
blood = words[3];
num = words[4];
address = words[5];
}
string cmdText = "INSERT INTO patients (" +
"firstlastname, birthdate, birthplace, bloodtype, telnum, address) " +
"VALUES (?,?,?,?,?,?)";
using (OleDbConnection cn = GetConnection())
{
using (OleDbCommand cmd = new OleDbCommand(cmdText, cn))
{
cmd.Parameters.AddWithValue("name", name);
cmd.Parameters.AddWithValue("date", date);
cmd.Parameters.AddWithValue("place", place);
cmd.Parameters.AddWithValue("blood", blood);
cmd.Parameters.AddWithValue("num", num);
cmd.Parameters.AddWithValue("address", address);
cmd.ExecuteNonQuery();
}
}
}
关于c# - 从数据库中消除重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14034773/