插入失败

本文关键字:失败 插入 | 更新日期: 2023-09-27 18:32:56

int dose = Convert.ToInt16(DoseTextBox.Text.ToString());
            try
            {
                SqlCommand AddMed = new SqlCommand("INSERT INTO Medications VALUES(@Medication,@Dose,@manufacture)", mcs);
                AddMed.Parameters.Add("@Medication", SqlDbType.NVarChar).Value = MedName.Text.ToString();
                AddMed.Parameters.Add("@Dose", SqlDbType.Int).Value = dose;
                AddMed.Parameters.Add("@manufacture", SqlDbType.NVarChar).Value = ManuDB.Text.ToString();
                mcs.Open();
                AddMed.ExecuteNonQuery();
                mcs.Close();
                MessageBox.Show("Med Added", "Done!");
            }
            catch (Exception)
            {
                MessageBox.Show("Oops!", "Something went wrong");
            }

我做错了什么吗? 此函数的结果是"Med Added",但无论我执行查询多少次或使用 Ctrl+R 刷新结果,"药物"表似乎都没有任何新行

我错过了什么吗? 我尝试从返回的值中删除 ToString 方法,但这不是问题所在。我相信。ManuDB是制造商投递箱。

插入失败

尝试替换SqlCommand AddMed = new SqlCommand("INSERT INTO Medications VALUES(@Medication,@Dose,@manufacture)", mcs);白色询问点(?)中的@variable,如下所示:

SqlCommand AddMed = new SqlCommand("INSERT INTO Medications VALUES(?,?,?)", mcs);
AddMed.Parameters.Add("@Medication", SqlDbType.NVarChar).Value = MedName.Text.ToString();
AddMed.Parameters.Add("@Dose", SqlDbType.Int).Value = dose;
AddMed.Parameters.Add("@manufacture", SqlDbType.NVarChar).Value = ManuDB.Text.ToString();

如果您有更多列,则为 3。另一列。那么我认为插入部分应该是:

INSERT INTO Medications(Medication,Dose,manufacture) 
VALUES(@Medication,@Dose,@manufacture)

首先:您不应该在try块中关闭连接,而应该在finally中关闭连接。这可确保在发生错误时连接也会关闭。

第二:您的参数可能存在错误。尝试改用AddWithValue并尝试使用这些类型。您的Medication表是否具有递增的主键identity或者您是否必须手动分配 ID?显示字段的数据类型。

编辑:无论如何,奇怪到你没有收到错误。您是否调试过以查看ExecuteNonQuery返回的内容(应该是 1)?一个"愚蠢"的问题:你使用的是正确的数据库吗?也许SQL-Server Express在bin/debug文件夹中创建了一个副本。单击您的 MDF 文件并检查属性并确保将复制到输出目录设置为 Do Not Copy