2017-06-20 110 views
0

我已经编写了一个程序来处理XML并将其导入到Accsess表中,但它会产生错误。我有一个sql注入类型的声明我认为这不太对,一些如何。如何将Xml数据添加到Accsess数据库错误

The Database(Accsess) has this 
Index Field 1 Autonumber primary key 
Property Field 2 ShortText 
PValue Field 3 ShortText 
PDefault Field 4 ShortText 
Ptype Field 5 ShortText 

我的代码产生这个错误 Error System.Data.OleDb.OleDbException (0x80040E10): Parameter ?_1 has no default value. at System.Data.OleDb.OleDbCommand.ExecuteCommandTextErrorHandling(OleDbHResult hr) at System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult(tagDBPARAMS dbParams, Object& executeResult) at System.Data.OleDb.OleDbCommand.ExecuteCommandText(Object& executeResult) at System.Data.OleDb.OleDbCommand.ExecuteCommand(CommandBehavior behavior, Object& executeResult) at System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior behavior, String method) at System.Data.OleDb.OleDbCommand.ExecuteNonQuery() at Beta3.Form1.button1_Click(Object sender, EventArgs e) in C:\Users

An this is the code that produces it. 

String files; 
     files = "c:\\temp\\launch.xml"; 
     SetCon.Text = SetCon.Text + "Processing Lauch Working \n"; 
     String item1, item2, item3, item4; 
     XmlReader reader1 = XmlReader.Create(files); 

     while (reader1.Read()) 
     { 
      item1 = reader1.GetAttribute("name"); 
      item2 = reader1.GetAttribute("amount"); 
      item3 = reader1.GetAttribute("default"); 
      item4 = reader1.GetAttribute("group"); 
      try 
      { 
       SetCon.Text = SetCon.Text + "Adding Records \n"; 
       string ConnString = (@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\temp\\Set.mdb;Persist Security Info=False"); 
       string cmdText = "INSERT INTO Launch([Property], [PValue], [PDefault],[PType]) VALUES(?,?,?,?)"; 
       using (OleDbConnection Conn = new OleDbConnection(ConnString)) 
       { 
        using (OleDbCommand cmd = new OleDbCommand(cmdText, Conn)) 
        { 

         cmd.Parameters.AddWithValue("Property", item1); 
         cmd.Parameters.AddWithValue("PValue", item2); 
         cmd.Parameters.AddWithValue("PDefault", item3); 
         cmd.Parameters.AddWithValue("PType", item4); 

         Conn.Open(); 
         cmd.ExecuteNonQuery(); 
         Conn.Close(); 
        } 

       } 

我认为它的自动编号导致错误等,但是荫没有足够的经验去了解它。可能有些人可以发现Iam做错了什么。

回答

1

您可以尝试使用@而不是?

试试这个:

string cmdText = "INSERT INTO Launch([Property], [PValue], [PDefault],[PType]) VALUES('@Property','@PValue','@PDefault','@PType')"; 
       using (OleDbConnection Conn = new OleDbConnection(ConnString)) 
       { 
        using (OleDbCommand cmd = new OleDbCommand(cmdText, Conn)) 
        { 

         cmd.Parameters.AddWithValue("@Property", item1); 
         cmd.Parameters.AddWithValue("@PValue", item2); 
         cmd.Parameters.AddWithValue("@PDefault", item3); 
         cmd.Parameters.AddWithValue("@PType", item4); 

         Conn.Open(); 
         cmd.ExecuteNonQuery(); 
         Conn.Close(); 
        } 

       } 
+0

错误System.Data.OleDb.OleDbException(0x80040E10):参数@没有默认值。 在System.Data.OleDb.OleDbCommand.ExecuteCommandTextErrorHandling(OleDbHResult小时) 在System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult(tagDBPARAMS dbParams,对象&的ExecuteReuslt) 在System.Data.OleDb.OleDbCommand.ExecuteCommandText(对象&的ExecuteReuslt) 在System.Data.OleDb.OleDbCommand.ExecuteCommand(CommandBehavior behavior,Object&executeResult) at System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior behavior,String method) at System.Data.OleDb。 – Data

+0

@Data我已编辑我的答案 – ohadinho

+1

本示例处理编辑后的示例,但正如我发现的那样如果添加代码(复制粘贴),那么它只会将文本item1,item2 ..填充到columes/records中。 。它没有放入实际的变量值。 @ ohadinho Plz检查你的代码为Samams编码exable表 – Data