2013-03-18 2 views
0

У меня есть таблица в базе данных, в которой имена авторов хранятся вместе с их цитатами из Google. несколько авторов разделяются запятой. Я разделил их и показать их на вид сетки данных, используя этот код:Нулевое значение, возвращаемое с datagridview

foreach (DataRow row in dataTable.Rows) 
{ 
    int GSCitations; 
    { 
     string paper = Convert.ToString(row[1]); 
     Int32.TryParse(Convert.ToString(row[2]), out GSCitations); 
     string str = Convert.ToString(row[0]); 
     string[] result = str.Split(new Char[] { ',' }); 
     foreach (string author in result) 
     { 
      dataGridView1.Rows.Add(id, author, paper, GSCitations); 
      id++; 
     } 

    } 

тогда я забрать их из поля зрения сетки данных и пытались хранить их в базе данных, используя этот код:

foreach (DataGridViewRow row in dataGridView1.Rows) 
{ 
     try 
     { 
     mysqlStatement = "INSERT INTO test1(ID, Authors,Paper, GSCitations) VALUES('" + row.Cells[0].Value + "','" + row.Cells[1].Value + "','" + row.Cells[2].Value + "','" + row.Cells[3].Value +"');"; 
     mySqlCommand = new MySqlCommand(mysqlStatement, mySqlConnection); 
     mySqlCommand.ExecuteNonQuery();  
     } 

     catch(Exception excep) 
     { 
     MessageBox.Show(excep.ToString()); 
     } 
    } 

Но исключает исключение, этот идентификатор равен null. поскольку id является первичным ключом, он не может b null. в представлении сетки данных ни один идентификатор не является нулевым, но при его хранении он возвращает нулевой идентификатор сразу после разделения одной группы авторов. Я имею в виду, что первая статья написана четырьмя авторами. он возвращает null сразу после 4 строк, а затем после каждой группы. пожалуйста, помогите

+2

Пара вещей в вашем коде * (но не связанные) *, первое использование [параметризованных запросов] (HTTP: //www.dotnetperls.com/sqlparameter) вместо конкатенации запросов. Во-вторых, как вы можете снова вставить в базу данных с тем же самым первичным ключом? вы пытаетесь обновить? – Habib

+0

Что такое значение в ID? это нуль? Является ли таблица базы данных пустой? –

+0

Я обрезаю таблицу каждый раз, когда я запускаю код, я делаю это только для проверки цели – mani

ответ

0

Попробуй изменить уры клетки [Индекс] клетки [имя столбца], я предполагаю, что индекс является причиной у идентификационных колонки возвращение нулевой

mysqlStatement = "INSERT INTO test1(ID, Authors,Paper, GSCitations) 
VALUES('" +row.Cells[YOUR COLUMN NAME].Value + "','" + 
row.Cells[YOUR COLUMN NAME].Value + "','" + 
row.Cells[YOUR COLUMN NAME].Value + "','" + 
row.Cells[YOUR COLUMN NAME].Value +"');"; 
+0

, потому что он пытается вставить что-то, что не существует в базу данных? поэтому он получил нулевые значения? –

+0

, но это показывает, что их значение не равно нулю в datagridview – mani

+0

имя столбца не помогло – mani

1

нужно правильно отладить код и увидеть полный код, чтобы дать точную причину такого поведения, но если вы просто хотите, чтобы заставить его работать попробовать этот

foreach (DataGridViewRow row in dataGridView1.Rows) 
{ 
     if(row == null || row.Cells[0].Value == null) 
      continue; 

     try 
     { 
      mysqlStatement = "INSERT INTO test1(ID, Authors,Paper, GSCitations) VALUES('" + row.Cells[0].Value + "','" + row.Cells[1].Value + "','" + row.Cells[2].Value + "','" + row.Cells[3].Value +"');"; 
      mySqlCommand = new MySqlCommand(mysqlStatement, mySqlConnection); 
      mySqlCommand.ExecuteNonQuery();  
     } 

     catch(Exception excep) 
     { 
      MessageBox.Show(excep.ToString()); 
     } 
    } 
+0

Нет! Я пробовал это, но это нехорошо, у меня есть 3 записи lac, потому что цикл вернет нулевое значение как минимум 2 lac раз, так что это имеет огромное значение. Я хочу это исправить – mani

Смежные вопросы