【发布时间】:2017-10-05 22:10:00
【问题描述】:
我目前正在从事一个项目,该项目要求我使用具有以下要求的 WPF:
- 允许用户在堆栈面板中添加更多文本框
- 将每个文本框中的用户输入(作为字符串/nvarchar)保存为新记录 数据库
这背后的想法是,如果我们收到多个包裹,每批货物通常会分成多个位置,我们需要找到每个组件所在的位置。
我在下面包含了我的代码示例,它的准系统并且可能不仅仅是将要插入的“记录”字段。我已将 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();
}
}
编辑:我已经检查了循环文本框问题(根据 reds 先生的评论),虽然我从另一篇文章中发现了一些有用的东西,但它没有详细说明这些值是如何保存在一个分贝。
【问题讨论】:
-
而不是
Connection.Open()和您需要使用SqlConnection 对象SqlConnection.Open();的实例的所有其他连接代码,您还应该在循环之前打开连接,然后将连接包装在@ 987654325@ 语句,您不必手动关闭它。 -
额外的逗号。 string Query = "INSERT INTO TestLoop (Record) -->,
-
@prospector 谢谢你的提示!
-
@AndrewHarris,我已经对语法进行了编辑,但遗憾的是我仍然遇到同样的错误