INSERT INTO失败

时间:2012-05-03 09:15:16

标签: c# sql sql-server ado.net sql-server-2005-express

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。

3 个答案:

答案 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