我最近开始在.NET(C#)中学习一些数据库的东西,我在将对象列表插入本地数据库时遇到了问题。我不知道原因,但是在执行查询后,base仍然是空的并且没有错误或警告,你能告诉我代码是否有任何问题,或者是否有任何其他原因导致它没有工作正常。
我试图调试,但代码似乎有用,它传递if语句,并添加参数的值,我也删除了线程启动方法并同步完成但仍然没有。
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();
}
答案 0 :(得分:4)
在某些时候你必须实际执行SQL命令,你现在不会这样做:
cmd.ExecuteNonQuery();
如果您要插入一条记录,这将接近尾声。虽然看起来你试图在一个循环中插入多个记录,所以这当然会发生在循环内部。 (每条记录一次。)
答案 1 :(得分:1)
您必须执行SqlCommand。把它放在“NextIndex = count;”之前:
cmd.ExecuteNonQuery();
答案 2 :(得分:1)
你忘记了使用块:
cmd.ExecuteNonQuery();
答案 3 :(得分: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;