2017-05-25 28 views
1

我尝试从第一个表中获取4个名称,并检查其他20个组中每个名称出现4次频繁出现的频率,然后在groupevenfrequency上更新它。不过,我在编码上遇到了错误。欣赏是否有人可以提供帮助。谢谢。C#查询和字符串编码错误

从这个编码中,为什么str [1]和str [2]和str [3]和str [4]是相同的teachername?但是,SQL命令SELECT DISTINCT已经产生了4个不同的教师。请指教。

 dbConnect = new SQLiteConnection("Data Source=school.db;Version=3;"); 
     dbConnect.Open(); 
     cmd = new SQLiteCommand(); 
     cmd = dbConnect.CreateCommand(); 
     cmd.CommandText = "SELECT DISTINCT Teacher_Name from " + myTeacher + " Order by Sum_Weekly_Credit desc LIMIT 4"; 
     DataTable dt = new DataTable(); 
     SQLiteDataAdapter da = new SQLiteDataAdapter(cmd); 
     da.Fill(dt); 
     string[] str = new string[5]; 
     for (int i = 1; i <= 4; i++) 
     { 
      foreach (DataRow dr in dt.Rows) 
      { 
       str[i] = dr["Teacher_Name"].ToString(); 
       cmd.ExecuteNonQuery(); 
      } 
     } 
     dbConnect.Close(); 
     dbConnect = new SQLiteConnection("Data Source=school.db;Version=3;"); 
     dbConnect.Open(); 
     cmd2 = new SQLiteCommand(); 
     cmd2 = dbConnect.CreateCommand(); 
     cmd3 = new SQLiteCommand(); 
     cmd3 = dbConnect.CreateCommand(); 
     for (int j = 1; j <= 20; j++) 
     { 
     cmd2.CommandText = "SELECT Subject FROM Group_Even_" + j + " WHERE Teacher_Name = @Teacher_Name1 OR Teacher_Name = @Teacher_Name2 OR Teacher_Name = @Teacher_Name3 OR Teacher_Name = @Teacher_Name4"; 
     cmd2.Parameters.AddWithValue("@Teacher_Name1", str[1]); 
     cmd2.Parameters.AddWithValue("@Teacher_Name2", str[2]); 
     cmd2.Parameters.AddWithValue("@Teacher_Name3", str[3]); 
     cmd2.Parameters.AddWithValue("@Teacher_Name4", str[4]); 
     DataTable dt2 = new DataTable(); 
     SQLiteDataAdapter da2 = new SQLiteDataAdapter(cmd2); 
     da2.Fill(dt2); 
         if (dt2.Rows.Count > 0) 
       { 
        int TempCountFrequency = dt2.Rows.Count; 

cmd2.CommandText = "UPDATE GroupEvenFrequency SET GroupEven_Frequency = @GroupEven_Frequency WHERE GroupEven_Name = Group_Even_" + j + ""; 
        cmd2.Parameters.AddWithValue("@GroupEven_Frequency", TempCountFrequency); 
        cmd2.ExecuteNonQuery(); 
       } 
       else 
       { 
        continue; 
       } 

    } 
+0

当您使用编号表时,这通常表示设计不好。为什么不是那个数字在表格中追加到表格中而是在一个表格中? – CodeCaster

+2

严格来说,在某些时候''SELECT Subject FROM Group_Even_“+ j'试图访问一个名为'Group_Even_7'的表,但是它看起来并不像它存在于你的数据库中。 @CodeCaster当然是正确的,就数据库设计而言,这段代码引发了各种各样的红旗。 –

+0

它似乎你会有一个更好的设计与group_even作为1表“领域的”组“而不是20个不同的表 – BugFinder

回答

1

你在这里的代码如下错误....

for (int i = 1; i <= 4; i++) 
{ 
    foreach (DataRow dr in dt.Rows) 
    { 
     str[i] = dr["Teacher_Name"].ToString(); 
     cmd.ExecuteNonQuery(); 
    } 
} 

您肯定期待dt.Rows包含4个名字,你有兴趣?那么为什么有外部循环。

所以应该不会更喜欢...

string[] str = new string[5]; 
int i = 1; 
foreach (DataRow dr in dt.Rows) 
{ 
    str[i] = dr["Teacher_Name"].ToString(); 
    i++; 
} 

但正如其他人所指出的总体思路可以用一个反思做。代码不会满足您可能没有4个不同的教师姓名的事实

+0

非常感谢您的建议。有用。谢谢谢谢。 – Michael

+0

顺便说一句,你有什么办法如何编码复制一个数据表到另一个数据表的C#sqlite的所有列和行以更快的方式?谢谢。 – Michael

+0

@迈克尔,如果这已修复它,你可以标记这是正确的答案。如果您有其他问题,最好在SO – Flexicoder