如何使用C#Foreach循环将记录插入数据库?

时间:2017-05-08 01:50:02

标签: c# sql wpf loops foreach

我目前正在开展一个项目,我被要求在WPF上工作,并满足以下要求:

  1. 允许用户在堆栈面板中添加更多文本框
  2. 将每个文本框中的用户输入(作为字符串/ nvarchar)保存为新记录 数据库
  3. 这背后的想法是,如果我们收到多个包裹,每个货物通常分成多个位置,我们需要找到每个组件的位置。

    我已经在下面提供了我的代码示例,它的准系统并且可能不仅仅包含将要插入的“记录”字段。我已将RecordID字段设置为标识字段,因此我不担心声明ID字段。它不包含在样本中,但每条记录都链接到ShipmentID。

    我很感激任何帮助,因为我执行它时遇到了麻烦(并且我的研究已经碰壁了)因为我的代码遇到了:

    'System.InvalidOperationException'发生在System.Data.dll'中,CommandText属性未初始化错误,当我尝试保存记录时。我遗憾地发现只有模糊的花絮如何解决我的问题(或者我在研究中可能很糟糕)。

        private void StackAddTB(object sender, RoutedEventArgs e)
        {
            TextBox NewBox = new TextBox() { Margin = new Thickness(0, 10, 0, 0), Width = 100, Height = 20 };
            StackBoxes.Children.Add(NewBox);
        }
    
        private void SaveMulti(object sender, RoutedEventArgs e)
        {
            string CStr = Manifesting.Properties.Settings.Default.PSIOpsSurfaceCS;
            SqlConnection Connection = new SqlConnection(CStr);
            string Query = "INSERT INTO TestLoop (Record), Values (Record)";
            SqlCommand Command = new SqlCommand(Query, Connection)
    
            foreach (TextBox TestTB in StackBoxes.Children.OfType<TextBox>())
            {
                try
                {
                    Connection.Open();
                    Command = Connection.CreateCommand();
                    Command.Parameters.AddWithValue("@Record", TestTB.Text );
                    Command.ExecuteNonQuery();
                }
                catch (SqlException ex)
                {
                    MessageBox.Show(ex.ToString());
                }
                finally
                {
                    Connection.Close();
                }
            }
    

    编辑:我已经检查了循环文本框问题(根据先生的红色评论),虽然我发现其他帖子中的一些有用的东西,但它没有详细说明如何保存这些值一个数据库。

1 个答案:

答案 0 :(得分:0)

执行此操作时:

 Command = Connection.CreateCommand();
  Command.Parameters.AddWithValue("@Record", TestTB.Text );
  Command.ExecuteNonQuery();

你之前在Command中“破坏”了什么,所以你永远不会在任何地方指定实际的查询。这就是为什么它会给你一个例外 - 你实际上不给它运行查询。

注意这一行:

 SqlCommand Command = new SqlCommand(Query, Connection);

目前没有任何区别。

相关问题