BEBE2011 Ответов: 1

C#: имя столбца или количество предоставленных значений не соответствует определению таблицы.


Привет ,
То, что я пытаюсь сделать, - это загрузить данные из XML-файла в базу данных sql.
Мой XML-файл выглядит так.
<?xml version="1.0" encoding="utf-8"?>
<Table>
	<Product>
		<Product_id>1</Product_id>
		<Product_name>Product 1</Product_name>
		<Product_price>1000</Product_price>
	</Product>
....


Имена столбцов моей базы данных-Id[int], ProductName[nvarchar50], ProductDescription[nvarchar4000] и ряд других столбцов.

Ошибка, которую я получаю
Column name or number of supplied values does not match table definition.


Что я уже пробовал:

private void button3_Click(object sender, EventArgs e)
     {
         string connetionString = null;
         SqlConnection connection;
         SqlCommand command;
         SqlDataAdapter adpter = new SqlDataAdapter();
         DataSet ds = new DataSet();
         XmlReader xmlFile;
         string sql = null;

         int product_ID = 0;
         string Product_Name = null;
        string product_Price = null;

         connetionString = "Data Source=server name;Initial Catalog=database;User ID=user;Password=password";

         connection = new SqlConnection(connetionString);

         xmlFile = XmlReader.Create("Product.xml", new XmlReaderSettings());
         ds.ReadXml(xmlFile);
         int i = 0;
         connection.Open();
         for (i = 0; i <= ds.Tables[0].Rows.Count - 1; i++)
         {
             product_ID = Convert.ToInt32(ds.Tables[0].Rows[i].ItemArray[0]);
             Product_Name = ds.Tables[0].Rows[i].ItemArray[1].ToString();
             product_Price = ds.Tables[0].Rows[i].ItemArray[2].ToString();
                 //Convert.ToDouble(ds.Tables[0].Rows[i].ItemArray[2]);
             sql = "insert into Product values(" + product_ID + ",'" + Product_Name + "'," + product_Price + ")";
             command = new SqlCommand(sql, connection);
             adpter.InsertCommand = command;
             adpter.InsertCommand.ExecuteNonQuery();
         }
         connection.Close();
         MessageBox.Show("Done .. ");
     }
 }

1 Ответов

Рейтинг:
6

koolprasadd

Ошибка немного самоочевидна, ваши предоставленные значения для вставки не совпадают с количеством столбцов в базе данных.
Пожалуйста, проверьте количество столбцов в базе данных или хороший способ справиться с такой проблемой-использовать имя столбца в запросе insert
см. ниже запрос

sql = "insert into Product (Id, ProductName, ProductDescription)  values(" + product_ID + ",'" + Product_Name + "'," + product_Price + ")";

прежде чем продолжить, пожалуйста, проверьте, что Ваш идентификатор не должен автоматически увеличиваться.