我有一个本地数据库,该数据库已经有记录。我目前正在图书馆项目中工作,并且在数据库中同时具有“书籍和类别”表(类别在“书籍”表中也是FK)。
在Windows窗体应用程序中,我正在尝试实现一种窗体,以便在选择类别时使用组合框在books表中插入新的图书记录。
到目前为止,我已经尝试了以下代码-按保存按钮确实会在数据库中生成表单中给出的详细信息,但是Category值始终为NULL(组合框不起作用)。
能否请您帮我找到以下实现中所缺少的内容?以下代码是我仅针对一个类别ID进行的测试-Getters&Setters已实现。
编辑下面的详细信息-请注意,我知道并且仍然需要使用参数化查询,在对组合框问题进行排序后,我将对其进行调查。
private void AddBookRecordForm_Load(object sender, EventArgs e)
{
var dataSource = new List<Category>();
dataSource.Add(new Category() { CategoryID = '4', CategoryName = "History" });
cbCategory.ValueMember = "CategoryID";
cbCategory.DisplayMember = "CategoryName";
cbCategory.DataSource = dataSource;
}
编辑:
string ConnectionString = @"Data Source=.\SQLEXPRESS;AttachDbFilename=
C:\Program Files\Microsoft SQL Server\MSSQL14.SQLEXPRESS\MSSQL\DATA\Library
System Project.mdf ;Integrated Security=True;Connect Timeout=30";
string Query = "insert into Books (BookName, BookAuthor, BookAvailabilityQuantity, Price) values ('" + this.txtName.Text.Trim()
+ "','" + this.txtAuthor.Text.Trim()
+ "','" + this.txtAvailabilityQuantity.Text.Trim()
+ "','" + this.txtPrice.Text.Trim() + "');";
SqlConnection DBCon = new SqlConnection(ConnectionString);
SqlCommand DBCommand = new SqlCommand(Query, DBCon);
SqlDataReader DBReader;
try
{
DBCon.Open();
DBReader = DBCommand.ExecuteReader();
MessageBox.Show("New book record added to the system.", "Library System", MessageBoxButtons.OK);
while (DBReader.Read())
{
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
// *** If you're going to be opening a connection be sure to close it ***
// *** Finally blocks work well for this ***
DBCon.Close();
this.txtName.ResetText();
this.txtAuthor.ResetText();
this.txtAvailabilityQuantity.ResetText();
this.txtPrice.ResetText();
}
答案 0 :(得分:1)
数据源可以提供控件中的项目,但是选择新项目不会像更改绑定文本框中的值那样自动更改数据值。您将需要手动获取所选值并更新更新记录中的相应字段。请参阅this帖子。
String Query = "insert into Books (CategoryName, BookName, BookAuthor, BookAvailabilityQuantity, Price) values (
"'" + cbCategory.Text
+ "','" + this.txtName.Text.Trim()
+ "','" + this.txtAuthor.Text.Trim()
+ "','" + this.txtAvailabilityQuantity.Text.Trim()
+ "','" + this.txtPrice.Text.Trim() + "');";