我想将项目从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();
}
问题:
在for循环中,如2星所示,我收到错误消息: “输入字符串的格式不正确。”
我试着查看之前发布过相同错误的解决方案,但到目前为止运气不大。
我认为我的错误是列表最初有字符串值,但后来我尝试输入整数sqlite列(请参阅原始代码中的create table语句)
由于原始列表值都是字符串,我如何简单地创建一个表insqlite,它存储列表中的STRING值并避免错误?
有人可以帮我解释确切的语法吗?
答案 0 :(得分:2)
要将数据库列声明为文本列而不是整数列,请将integer
替换为text
。
要设置字符串参数,请勿将其转换为整数;只需删除Convert.ToInt32
调用并直接使用该值。