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 + 刷新结果,Medication表似乎没有任何新行[R
我错过了什么吗?我尝试从返回的值中删除ToString
方法,但这不是问题。我相信。 ManuDB是制造商Drop Box。
答案 0 :(得分:1)
如果您有更多列,那么3.另一列。然后我认为插入部分应该是:
INSERT INTO Medications(Medication,Dose,manufacture)
VALUES(@Medication,@Dose,@manufacture)
答案 1 :(得分:1)
尝试使用询问点(?)替换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();
答案 2 :(得分:1)
首先:您不应该关闭try
块中的连接,而应关联finally
中的连接。这可以确保在发生错误时也可以关闭连接。
秒:您的参数可能存在错误。尝试使用AddWithValue
代替并使用类型。您的Medication
表是否具有identity
增量的主键,或者您是否必须手动分配ID?显示字段的数据类型。
编辑:无论如何,奇怪的是你不会收到错误。您是否已调试以查看ExecuteNonQuery
返回的内容(应为1)?一个“愚蠢”的问题:您使用的是正确的数据库吗?也许SQL-Server Express在bin / debug文件夹中创建一个副本。单击您的MDF文件并检查属性,并确保copy To output directory设置为Do Not Copy
。