2012-05-03 186 views
-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 +[RINSERT INTO失败

上午我错过了什么?我试图从返回的值中删除ToString方法,但这不是问题。我相信。 ManuDB是制造商Drop Box。

+0

您是否尝试过提交更改? – Uflex

+0

您使用的是什么RDBMS?据我所知,ORACLE(例如)需要你显式地提交事务。 – MatBailie

+0

@Uflex提交?你的意思是执行查询?我也尝试过使用SqlDataAdapter,但这似乎也失败了,所以我真的超出了我所知道的可能解决方案。 –

回答

1

如果您有更多列然后3.另一列。那么我想插入部分应该是:

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

我实际上拥有MedID int身份作为主键,我认为我不能插入,所以我只是插入药物,剂量和制造。 –

+0

这就是为什么你必须指定这些列。像上面的答案 – Arion

+0

@Arion:如果主键列是一个IDENTITY列,那么SQL Server会跳过它。尽管为了提高可读性而指定列名仍然是一个好习惯,并且为了保护查询免受未来在查询中引用的列之间添加额外列的影响。 – weenoid

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(); 
+1

在SQL-Server中,参数需要'@',问号用于ms访问。 –

+0

以及如何将值分配给每个“?”符号? –

+1

刚刚编辑了我的答案,当你添加参数时他们替换了?,所以,第一个参数替换了第一个?等 –

1

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

第二个:您的参数可能有错误。尝试使用AddWithValue来代替并使用类型。您的Medication表的主键是否为identity增量,或者您是否需要手动分配ID?显示字段的数据类型。

编辑:无论如何,足够奇怪,你没有得到一个错误。你有没有调试,看看ExecuteNonQuery返回(应该是1)?一个“愚蠢”的问题:你使用的数据库是否正确?也许SQL-Server Express在bin/debug文件夹中创建一个副本。点击您的MDF文件并检查属性,并确保copy To output directory设置为Do Not Copy

+0

MedID设置为增加1,并以1 ..默认设置开始,我做了try-catch-finally并且它工作,给我显示了相同的“Medication Added”,但不是在表本身。 –

+0

我想我会删除并重新创建表本身,而不是浪费mytime和yourtime在这个... idk,不可理解的错误? –

+0

@AmeerAdel:编辑我的答案。 –