我想将column2传递给函数并使用function的输出更新column3。我已经使用func函数来计算输出。当我运行该程序 它只取最后一个值作为输入并输出所有具有相同值的列。我做错了什么?
sqlite1 = new SQLiteConnection("DataSource = D:/datab.db;version=3");
sqlite1.Open();
string query1 = "select * from ramrotable";
SQLiteCommand cmd = new SQLiteCommand(query1, sqlite1);
SQLiteDataReader reader = cmd.ExecuteReader();
while (reader.Read())
{
Console.WriteLine("Age::" + reader["age"]);
//int data = Convert.ToInt16(reader["age"]);
string tempquery = string.Format("UPDATE ramrotable SET num =
func({0})",reader["age"]);
cmd = new SQLiteCommand(tempquery, sqlite1);
cmd.ExecuteNonQuery();
}
string query4 = "select * from ramrotable";
cmd = new SQLiteCommand(query4, sqlite1);
reader = cmd.ExecuteReader();
while (reader.Read())
{
Console.WriteLine("Name: " + reader["name"] + " Age: " +
reader["age"] + " Num: " + reader["num"]);
}
答案 0 :(得分:1)
您需要使用WHERE
子句告诉SQLite要更新哪条记录。否则所有记录都会受到影响。请确保在WHERE
子句中使用列(或列的组合),唯一地标识记录!
理想情况下,每条记录都会有一个包含唯一值的ID
列,并且是主键。
我从评论中了解到,您实际上想要更新num
列的值,具体取决于同一记录的age
列中的值 ,对于表中的所有记录。
要做到这一点,您既不需要获取所有记录也不需要循环。您需要做的就是调用以下语句:
UPDATE ramrotable SET num = func(age)
这会获取age
列的值,将其传递给func
,并将结果设置为表格中每条记录的num
列的新值< / em>的
因此,您上面写的所有内容都可以缩短为
sqlite1 = new SQLiteConnection("DataSource = D:/datab.db;version=3");
sqlite1.Open();
cmd = new SQLiteCommand("UPDATE ramrotable SET num = func(age)", sqlite1);
cmd.ExecuteNonQuery();
答案 1 :(得分:0)
使用时
string tempquery = string.Format("UPDATE ramrotable SET num =
func({0})",reader["age"]);
您正在使用当前的func(年龄)值更新每一行。
要使用精确值更新每一行,您应该在while循环之外使用单个命令:
string updatequery = "UPDATE ramrotable SET num = func(age)";
cmd = new SQLiteCommand(updatequery, sqlite1);
cmd.ExecuteNonQuery();