0

C# の LIST から SQLite の TABLE に項目を転送したいと考えています。誰かがパラメーターの使用を提案するまで、これを行う方法がわかりませんでした。

これは私の最初の試みでした: (もちろん、それは間違っています)

    SQLiteConnection sqlite_conn;
    SQLiteCommand sqlite_cmd;

    sqlite_conn = new SQLiteConnection("Data Source=database.db;Version=3;New=True;Compress=True;");

    sqlite_conn.Open();

    sqlite_cmd = sqlite_conn.CreateCommand();

    sqlite_cmd.CommandText = "CREATE TABLE table1 (Seq integer primary key, Field integer , Description integer );";

    sqlite_cmd.ExecuteNonQuery();

    for (int i = 0; i < 500; i+=3)
    {
        // Lets insert something into our new table:
        sqlite_cmd.CommandText = "INSERT INTO table1 (Seq, Field, Description) VALUES (list[i], list[i+1], list[i+2]);"; THIS IS WHERE PROBLEM OCCURS!

        sqlite_cmd.ExecuteNonQuery(); 
    }

    sqlite_conn.Close();
}

これは、ユーザーが私がすべきだと提案したことです(パラメーターなどを追加します):

 sqlite_cmd.CommandText = "INSERT INTO table1 (Seq, Field, Description) VALUES (@p1,       @p2, @p3)";
  sqlite_cmd.Parameters.AddWithValue("@p1", 0);  // dummy initial values 
  sqlite_cmd.Parameters.AddWithValue("@p2", 0);
  sqlite_cmd.Parameters.AddWithValue("@p3", 0);
  for (int i = 0; i < 500; i+=3)
{
   sqlite_cmd.Parameters["@p1"].Value = Convert.ToInt32(list[i]);
  ** sqlite_cmd.Parameters["@p2"].Value = Convert.ToInt32(list[i+1]); ERROR OCCURS HERE
   sqlite_cmd.Parameters["@p3"].Value = Convert.ToInt32(list[i+2]); 
   sqlite_cmd.ExecuteNonQuery(); 
 }

問題 :

2 つの星で示されているように、for ループ内で、「入力文字列の形式が正しくありませんでした」というエラーが表示されます。

これと同じエラーが発生した以前の投稿の解決策を見てみましたが、これまでのところあまり運がありません。

私のエラーは、リストに最初は文字列値が含まれているが、後で整数の sqlite 列を入力しようとしたことだと思います (元のコードの create table ステートメントを参照)。

元のリストの値はすべて文字列であるため、リストの STRING 値を格納するテーブル insqlite を作成してエラーを回避するにはどうすればよいですか?

誰かが正確な構文で私を助けてくれますか?

4

1 に答える 1

2

データベース列を整数列ではなくテキスト列として宣言するには、 に置き換えintegerますtext

文字列パラメーターを設定するには、整数に変換しないでください。呼び出しをドロップしてConvert.ToInt32、値を直接使用するだけです。

于 2013-10-31T22:56:12.283 に答える