0

データベースにテーブルがあり、著者名がGoogleの引用とともに保存されています。複数の著者はコンマで区切ります。これらを分割し、次のコードを使用してデータ グリッド ビューに表示します。

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()); 
        }
  }

しかし、例外がスローされ、そのIDはnullです。id は主キーであるため、null にすることはできません。データ グリッド ビューでは ID は null ではありませんが、保存すると、1 つの著者グループが分割された直後に null ID が返されます。つまり、最初の論文が 4 人の著者によって書かれた場合です。4行の直後にnullを返し、その後すべてのグループの後に同様に返します。助けてください

4

2 に答える 2

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()); 
        }
  }
于 2013-03-18T05:57:20.173 に答える
0

あなたのセル[インデックス]をセル[列名]に変更してみてください。ID列がnullを返す理由はインデックスだと思います

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 +"');";
于 2013-03-18T05:51:21.957 に答える