2013-08-20 37 views
0

我似乎得到一個異常,它讀取「00附近的語法錯誤」 字符串',False)'後面的非關閉引號。我究竟做錯了什麼?我很難發現這樣的小錯誤。任何幫助,將不勝感激。先謝謝你。eception字符串後面未引用的引號。但我不知道爲什麼

更詳細一點:我使用visual studio和SQL server,如果這有助於縮小問題?

SqlConnection conn = Database.GetConnection(); 
     SqlCommand command ; 
     SqlDataAdapter adpter = new SqlDataAdapter(); 
     DataSet ds = new DataSet(); 
     XmlReader xmlFile ; 
     string sql = null; 



     int PatientNo=0; 
     bool FurtherVisitRequired; 
     string AdvisoryNotes=null; 
     string Prescription=null; 
      string TreatmentProvided=null; 
DateTime ActualVisitDateTime; 
     string Priority=null; 
     DateTime ScheduledDateTime; 
     string TreatmentInstructions=null; 
     int MedicalStaffID; 
     string VisitRefNo=null; 


     //conn = new SqlConnection(conn); 

     xmlFile = XmlReader.Create("\\HomeCareVisit.xml", new XmlReaderSettings()); 
     ds.ReadXml(xmlFile); 
     int i = 0; 
     conn.Open(); 
     for (i = 0; i <= ds.Tables[0].Rows.Count - 1; i++) 
     { 
      VisitRefNo=ds.Tables[0].Rows[i].ItemArray[0].ToString(); 
      PatientNo= Convert.ToInt32(ds.Tables[0].Rows[i].ItemArray[1]); 
ScheduledDateTime = Convert.ToDateTime(ds.Tables[0].Rows[i].ItemArray[2]); 
TreatmentInstructions = ds.Tables[0].Rows[i].ItemArray[3].ToString(); 
    MedicalStaffID= Convert.ToInt32(ds.Tables[0].Rows[i].ItemArray[4]); 
      Priority = ds.Tables[0].Rows[i].ItemArray[5].ToString(); 
        ActualVisitDateTime = Convert.ToDateTime(ds.Tables[0].Rows[i].ItemArray[6]); 
TreatmentProvided = ds.Tables[0].Rows[i].ItemArray[7].ToString(); 
      Prescription = ds.Tables[0].Rows[i].ItemArray[8].ToString(); 


      AdvisoryNotes = ds.Tables[0].Rows[i].ItemArray[9].ToString(); 





      FurtherVisitRequired =Convert.ToBoolean(ds.Tables[0].Rows[i].ItemArray[10]); 








      sql = "insert into HomeCareVisit values(" + VisitRefNo + ",'" + PatientNo + "'," + ScheduledDateTime + "" + TreatmentInstructions + ",'" + MedicalStaffID + "'," + Priority+ "'," + ActualVisitDateTime + ",'" + TreatmentProvided + "'," + Prescription+ "',"+AdvisoryNotes +"',"+FurtherVisitRequired+")"; 
      command = new SqlCommand(sql, conn); 
      adpter.InsertCommand = command; 
      adpter.InsertCommand.ExecuteNonQuery(); 
     } 
     conn.Close(); 
     MessageBox.Show("Done .. "); 

Icemand回答了原來的問題。但他的回答帶來了一個新的。如何在SQL命令中打開和關閉身份插入?

回答

0

您沒有使用參數,而且您也沒有替換包含字符串分隔符"'"的值。

您應該替換字符串中的apostrophs,例如TreatmentProvided.Replace("'", "''")
而且你不應該在第一個地方建立一個字符串。
使用參數。

PS: 你可以得到它與像這樣的idendity工作:

SET IDENTITY_INSERT [dbo].[HomeCareVisit] ON 
-- insert here: 
insert into HomeCareVisit VALUES (" + VisitRefNo + ",'" + PatientNo + "','" + ScheduledDateTime + "','" + TreatmentInstructions + "','" + MedicalStaffID + "','" + Priority+ "','" + ActualVisitDateTime + "','" + TreatmentProvided + "','" + Prescription+ "','"+AdvisoryNotes +"',"+FurtherVisitRequired+") 

-- end insert 
SET IDENTITY_INSERT [dbo].[HomeCareVisit] OFF 

此外,如果你正在寫表的內容返回到數據庫中,你可以讀取XML轉換成一個數據表,然後使用BulkInsert。

0

你錯過了一些引號和逗號下面一行:

sql = "insert into HomeCareVisit values(" + VisitRefNo + ",'" + PatientNo + "'," + cheduledDateTime + "" + TreatmentInstructions + ",'" + MedicalStaffID + "'," + Priority+ "'," + ActualVisitDateTime + ",'" + TreatmentProvided + "'," + Prescription+ "',"+AdvisoryNotes +"',"+FurtherVisitRequired+")";

缺少引號是圍繞ScheduledDateTime,Perescription,AdvisoryNotes,TreatmentInstructions等價值觀。你應該在字符串和日期時間變量周圍加引號,並且不應該放入數字。正確的代碼應該是:

sql = "insert into HomeCareVisit values(" + VisitRefNo + ",'" + PatientNo + "','" + ScheduledDateTime + "','" + TreatmentInstructions + "','" + MedicalStaffID + "','" + Priority+ "','" + ActualVisitDateTime + "','" + TreatmentProvided + "','" + Prescription+ "','"+AdvisoryNotes +"',"+FurtherVisitRequired+")";

我建議你應該檢查你的變量類型,並把周圍的提及的變量+標記取每個逗號來看看,如果他們是在正確的地方或者他們缺少。在將數據庫發送給可幫助您調試代碼的數據庫之前,請進行雙重檢查以打印出查詢字符串。

+0

謝謝你冰人。但是它現在說「無效列名稱False」 只有使用列列表且IDENTITY_INSERT爲ON時,才能指定表'HomeCareVisit'中標識列的顯式值。你有任何想法如何打開它,所以我可以插入到主鍵字段使用SQL命令?我知道如何通過SQL服務器來完成,而不是如何將其編碼到SQL命令中。 –

相關問題