【问题标题】:Data is not inserted into local database数据未插入本地数据库
【发布时间】:2017-04-26 17:10:05
【问题描述】:

我最近开始在 .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();
}

【问题讨论】:

    标签: c# sql sql-server winforms


    【解决方案1】:

    在某些时候,您必须实际执行 SQL 命令,而您目前不这样做:

    cmd.ExecuteNonQuery();
    

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

    【讨论】:

    • 谢谢大家的快速响应,我重建这个方法后忘记添加这一行了,这么简单的错误,但我看不到。非常感谢。
    【解决方案2】:

    您必须执行 SqlCommand。把它放在“NextIndex = count;”之前:

    cmd.ExecuteNonQuery();
    

    【讨论】:

      【解决方案3】:

      你忘记在 using 块中运行了:

      cmd.ExecuteNonQuery();
      

      【讨论】:

        【解决方案4】:

        你可以把它剪掉

                    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;
        

        【讨论】:

          猜你喜欢
          • 2013-02-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-02-07
          • 1970-01-01
          相关资源
          最近更新 更多