【发布时间】:2011-02-12 06:03:35
【问题描述】:
我从我的 CSV 文件中加载了 83 行,但是当我尝试更新 SQLite 数据库时,我得到 0 行...我不知道我做错了什么。
程序输出:
Num rows loaded is 83
Num rows updated is 0
源码为:
public void InsertData(String csvFileName, String tableName)
{
String dir = Path.GetDirectoryName(csvFileName);
String name = Path.GetFileName(csvFileName);
using (OleDbConnection conn =
new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" +
dir + @";Extended Properties=""Text;HDR=Yes;FMT=Delimited"""))
{
conn.Open();
using (OleDbDataAdapter adapter = new OleDbDataAdapter("SELECT * FROM " + name, conn))
{
QuoteDataSet ds = new QuoteDataSet();
adapter.Fill(ds, tableName);
Console.WriteLine("Num rows loaded is " + ds.Tags.Rows.Count);
InsertData(ds, tableName);
}
}
}
public void InsertData(QuoteDataSet data, String tableName)
{
using (SQLiteConnection conn = new SQLiteConnection(_connectionString))
{
using (SQLiteDataAdapter sqliteAdapter = new SQLiteDataAdapter("SELECT * FROM " + tableName, conn))
{
using (new SQLiteCommandBuilder(sqliteAdapter))
{
conn.Open();
Console.WriteLine("Num rows updated is " + sqliteAdapter.Update(data, tableName));
}
}
}
}
关于为什么它没有更新正确的行数的任何提示?
更新:
我尝试在调用更新之前设置命令,但我仍然遇到同样的问题......现在的代码是:
sqliteAdapter.InsertCommand = cmndBldr.GetInsertCommand();
Console.WriteLine("Num rows updated is " + sqliteAdapter.Update(data, tableName));
当我调试它时,命令文本是:_commandText = "INSERT INTO [Tags] ([tagId], [tagName], [description], [colName], [dataType], [realTime]) VALUES (@param1, @param2, @param3, @param4, @param5, @param6)"
这是一个以 xml 格式显示数据集状态的贴图:http://pastie.org/936882
【问题讨论】:
-
是不是你没有设置InsertCommand sql和params?快速浏览devart.com/dotconnect/sqlite/docs/…
-
@astander 我认为 SQLiteCommandBuilder 会根据这个例子 dotnetperls.com/sqlcommandbuilder-example 和这个例子 devart.com/dotconnect/sqlite/docs/… 来做到这一点
-
@Link: 请把“C#”留在标签里,不要离开标题。
-
这是打印在 XML 文件中的 SQLiteDataSet:pastie.org/936882(并不是说我发现它有任何问题,但如果有人注意到某些问题,它可能会帮助我提示)。
-
能否请您从调试器中给我以下信息... QDS 填满后,ds.tables[0].name 是什么。您要填写的表格的名称是什么?他们是一样的吗?如果它们不相同,那么这可能会使 SQLite dataAddapter 感到困惑。我不完全确定,但我认为当您告诉它基于数据集进行更新时,它会扫描该数据集以查找与源数据库表同名的表,并根据该表进行数据比较
标签: c# sqlite ado.net dataadapter