gpt4 book ai didi

c# - INSERT 语句不添加任何数据而不会抛出错误

转载 作者:搜寻专家 更新时间:2023-10-30 21:55:45 25 4
gpt4 key购买 nike

我正在尝试将火车对象添加到数据库以保存其详细信息以实现持久性。

我让它正常工作,所以我可以将火车添加到列表中。但是,当我尝试设置 INSERT 语句以将列车对象详细信息添加到数据库时。之后我检查它时,没有任何内容添加到我的数据库中。我也没有在任何地方抛出任何错误。

有人能看出我的 INSERT 语句有什么问题吗?

        //If the type combobox has Express selected
if (cbxType.Text == "Express")
{
//Create a new train with its specific details
Train train = trainFactory.TFactory("Express");
//Checks for error when making train
if (train == null)
MessageBox.Show("Can't Create Train");
else //Executes adding a new Express Train
{
//Stores the details of the textboxes/Combo boxes into the train details for each Train object
train.Type = cbxType.Text;
train.Departure = cbxDepartStation.Text;
train.Destination = cbxDepartStation.Text;
//Converts the time into DateTime format before passing to variable
train.DepartureTime = TimeSpan.Parse(txtDepartureTime.Text);
//Converts the date into DateTime format before passing to variable
train.DepartureDay = DateTime.Parse(txtDepartureDay.Text);
//If intermediate stops are selected. Throw exception
if (chbPeterborough.IsChecked == true || chbDarlington.IsChecked == true ||
chbYork.IsChecked == true || chbNewcastle.IsChecked == true)
{
throw new Exception();
}
//If first class radio button is checked, sets first class to true, else false
if (chbFirstClass.IsChecked == true)
{
train.FirstClass = true;
}
else
{
train.FirstClass = false;
}

//Adds a train object to the train list with its specific details
trains.add(train);

//String to hold all the Intermediate stops together in one for displaying to user
string intStops = string.Join(", ", train.IntermediateStop.Where(s => !string.IsNullOrEmpty(s)));

//Sql sequence to connect to database and insert details of each train
SqlConnection con = new SqlConnection(@"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\Trains.mdf;Integrated Security=True");
SqlCommand cmd = new SqlCommand();
cmd.CommandType = System.Data.CommandType.Text;
cmd.CommandText = "INSERT train (id, departure, destination, type, intermediate, departure_time, departure_date, sleeperBerth, firstClass) " +
"VALUES ( @trainID , @departure, @destination, @type, @intermediate, @dep_time, @dep_date, @sleep, @first)";
cmd.Parameters.AddWithValue("@trainID", train.TrainID);
cmd.Parameters.AddWithValue("@departure", train.Departure);
cmd.Parameters.AddWithValue("@destination", train.Destination);
cmd.Parameters.AddWithValue("@type", train.Type);
cmd.Parameters.AddWithValue("@intermediate", intStops);
cmd.Parameters.AddWithValue("@dep_time", train.DepartureTime);
cmd.Parameters.AddWithValue("@dep_date", train.DepartureDay);
cmd.Parameters.AddWithValue("@sleep", train.SleeperBerth);
cmd.Parameters.AddWithValue("@first", train.FirstClass);

cmd.Connection = con;

con.Open();
cmd.ExecuteNonQuery();
con.Close();

最佳答案

整个 AttachDbFileName= 方法是有缺陷的 - 充其量!在 Visual Studio 中运行您的应用程序时,它将复制 .mdf 文件(从您的 App_Data 目录到输出目录 - 通常是 .\bin\debug - 你的应用程序运行的地方)并且很可能,你的INSERT 工作得很好 - 但你只是在看错误的 .mdf 文件 最后!

如果您想坚持使用这种方法,请尝试在 myConnection.Close() 调用上放置一个断点 - 然后使用 SQL Server 检查 .mdf 文件Management Studio - 我几乎可以肯定你的数据就在那里。

在我看来真正的解决方案

  1. 安装 SQL Server Express(无论如何你已经完成了)
  2. 安装 SQL Server 管理工作室
  3. 在 SSMS 中创建您的数据库,为其指定一个合乎逻辑的名称(例如 Trains)
  4. 使用它的逻辑数据库名称(当您在服务器上创建它时给定的)连接到它 - 不要弄乱物理数据库文件和用户实例。在这种情况下,您的连接字符串将类似于:

    Data Source=.\\SQLEXPRESS;Database=Trains;Integrated Security=True

    其他一切都完全和以前一样...

另请参阅 Aaron Bertrand 的优秀博客文章 Bad habits to kick: using AttachDbFileName了解更多背景信息。

关于c# - INSERT 语句不添加任何数据而不会抛出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53465896/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com