2012-05-03 183 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:編輯我的答案。 –