-2
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");
            }

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

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

4

3 回答 3

1

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

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

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

于 2012-05-03T09:28:52.940 回答
1

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

INSERT INTO Medications(Medication,Dose,manufacture) 
VALUES(@Medication,@Dose,@manufacture)
于 2012-05-03T09:25:51.183 回答
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();
于 2012-05-03T09:26:13.087 回答