2017-04-26 150 views
0

我最近开始在.NET(C#)中学习一些数据库的东西,我在将对象列表插入本地数据库时遇到了问题。我不知道原因,但是在执行查询之后,base仍然是空的,并且没有错误或警告,您能告诉我代码是否有问题,或者是否有其他原因导致它无法正常工作。数据未插入本地数据库

我试过调试,但代码似乎工作,它通过如果语句,并添加参数的值,我也删除了线程启动方法,并做了同步,但仍然没有。

enter image description here

public static void SaveData() 
{ 
    new Thread(() => 
    { 
     Thread.CurrentThread.IsBackground = true; 

     using (SqlConnection conn = new SqlConnection(conString)) 
     { 
      conn.Open(); 

      using (SqlCommand cmd = new SqlCommand("INSERT INTO Przestoje(Urzadzenie, Czas, Data) VALUES(@nazwa, @czas, @data)", conn)) 
      { 
       cmd.Parameters.AddWithValue("@nazwa", SqlDbType.NVarChar); 
       cmd.Parameters.AddWithValue("@czas", SqlDbType.Int); 
       cmd.Parameters.AddWithValue("@data", SqlDbType.NVarChar); 

       int count = allEncounters.Count; 

       for (int i = 0; i < count; i++) 
       { 
        if (i >= NextIndex) 
        { 
         cmd.Parameters["@nazwa"].Value = allEncounters[i].Name; 
         cmd.Parameters["@czas"].Value = allEncounters[i].timeOnTimeout * 10; 
         cmd.Parameters["@data"].Value = allEncounters[i].startDate.ToString(); 
        } 
       } 

       NextIndex = count; 
      } 
     } 
    }).Start(); 
} 

回答

4

在某些时候你必须去实际执行SQL命令,您目前没有做的事:

cmd.ExecuteNonQuery(); 

如果你正在寻找插入一个记录,这将接近尾声。虽然看起来你试图在一个循环中插入多个记录,所以这当然会发生在循环内部。 (每条记录一次)

+0

谢谢你和其他人快速回应,我忘了在重建此方法后添加此行,这样简单的错误,但我看不到它。非常感谢。 – pablocity

1

您必须执行SqlCommand。之前将这个 “NextIndex =计数;”:

cmd.ExecuteNonQuery(); 
1

你忘了在使用块运行:

cmd.ExecuteNonQuery(); 
1

您可以修剪下来

  for (int i = NextIndex; i < allEncounters.Count; i++) 
      { 
        cmd.Parameters["@nazwa"].Value = allEncounters[i].Name; 
        cmd.Parameters["@czas"].Value = allEncounters[i].timeOnTimeout * 10; 
        cmd.Parameters["@data"].Value = allEncounters[i].startDate.ToString(); 
        cmd.ExecuteNonQuery(); 
      } 

      NextIndex = allEncounters.Count;