2013-10-31 134 views
0

我想将项目从C#中的LIST传输到SQLite中的TABLE。我根本不知道如何做到这一点,直到有人建议我用的参数:将sqlite int表转换为字符串,然后输入列表

这是我最初的尝试:(当然,这是错误的)

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

问题:

在for循环中,如2星所示,我收到一条错误消息:“输入字符串格式不正确。”

我试着看看以前的帖子有这个错误的解决方案,但没有太多的运气到目前为止。

我觉得我的错误是,名单最初具有的字符串值,但后来我试着输入进去整数sqlite的列(请参阅创建原码表语句)

由于原列表值都是字符串,会怎样我只是做一个表insqlite,它存储我的列表中的STRING值,并避免错误?

有人可以帮我准确的语法吗?

+1

很确定你的问题只是索引方法无法添加i + 1。如果你将这些加在括号外面,你可能会拥有它。 – paqogomez

+1

也,你可能想做++而不是i + 1。你每循环增加3次for循环,并且可以简单地在循环内递增我。 – paqogomez

+0

尝试更改列表只有[i],但仍然没有运气 – user2788405

回答

2

要将数据库列声明为文本列而不是整数列,请将integer替换为text

要设置字符串参数,请不要将其转换为整数;只需放下Convert.ToInt32调用并直接使用该值。

+0

嘿,我试过你的方法,仍然没有运气 - 我仍然收到错误“输入字符串不正确的格式。” 为什么会发生这种情况? @CL。 – user2788405

+1

那些虚拟值需要有正确的类型。 –

相关问题