Я пытаюсь использовать анализатор OleDb CSV для загрузки некоторых данных из файла CSV и вставки их в базу данных SQLite, но я получаю исключение при использовании метода OleDbAdapter.Fill
, и это разочаровывает:
Необработанное исключение типа
'System.Data.ConstraintException'
произошло в System.Data.dll
Дополнительная информация: не удалось
включить ограничения. Один или несколько рядов
содержат значения, нарушающие ненулевое значение,
ограничения уникального или внешнего ключа.
Вот исходный код:
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=No;FMT=Delimited"""))
{
conn.Open();
using (OleDbDataAdapter adapter = new OleDbDataAdapter("SELECT * FROM " + name, conn))
{
QuoteDataSet ds = new QuoteDataSet();
adapter.Fill(ds, tableName); // <-- Exception here
InsertData(ds, tableName); // <-- Inserts the data into the my SQLite db
}
}
}
class Program
{
static void Main(string[] args)
{
SQLiteDatabase target = new SQLiteDatabase();
string csvFileName = "D:\\Innovations\\Finch\\dev\\DataFeed\\YahooTagsInfo.csv";
string tableName = "Tags";
target.InsertData(csvFileName, tableName);
Console.ReadKey();
}
}
Файл "YahooTagsInfo.csv" выглядит следующим образом:
tagId,tagName,description,colName,dataType,realTime
1,s,Symbol,symbol,VARCHAR,FALSE
2,c8,After Hours Change,afterhours,DOUBLE,TRUE
3,g3,Annualized Gain,annualizedGain,DOUBLE,FALSE
4,a,Ask,ask,DOUBLE,FALSE
5,a5,Ask Size,askSize,DOUBLE,FALSE
6,a2,Average Daily Volume,avgDailyVolume,DOUBLE,FALSE
7,b,Bid,bid,DOUBLE,FALSE
8,b6,Bid Size,bidSize,DOUBLE,FALSE
9,b4,Book Value,bookValue,DOUBLE,FALSE
Я пробовал следующее:
- Удаление первой строки в файле CSV, чтобы она не перепутала его с реальными данными.
- Изменение флага ИСТИНА / ЛОЖЬ в реальном времени на 1 / 0.
- Я попробовал 1 и 2 вместе (т.е. удалил первую строку и изменил флаг).
Ничто из этого не помогло ...
Одним из ограничений является то, что tagId должен быть уникальным. Вот как выглядит таблица в режиме конструктора:
Кто-нибудь может мне помочь разобраться в чем здесь проблема?
Обновление:
Я изменил свойство HDR с HDR=No
на HDR=Yes
, и теперь оно не дает мне исключения:
OleDbConnection conn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + dir + @";Extended Properties=""Text;HDR=Yes;FMT=Delimited""");
Я предположил, что если HDR=No
и я удалил заголовок (т.е. первую строку), то он должен работать ... странно, он не работал. В любом случае, теперь я больше не получаю исключение.
Здесь возникла новая проблема: Метод обновления SQLiteDataAdapter, возвращающий 0