Я бы предложил сначала вставить новый файл во временную таблицу, используя синтаксис LOAD DATA INFILE. Ниже приведен пример, вам может потребоваться изменить его в соответствии с вашим вариантом использования (из этого руководства, например, );
LOAD DATA INFILE 'c:/tmp/populations.csv'
INTO TABLE Temp
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 ROWS;
Затем следующий запрос может быть использован для обновления. существующие строки в основной таблице:
UPDATE Populations p
LEFT JOIN Temp t ON p.city = t.city
SET
p.population = COALESCE(t.population, p.population),
p.status = CASE WHEN p.city IS NULL THEN 1 ELSE 0 END
И этот запрос вставит строки, которые еще не существуют:
INSERT INTO Populations
SELECT p.name, p.population, 1
FROM Temp t
WHERE NOT EXISTS (
SELECT 1 FROM Populations WHERE name = t.name)
BinaryReader читает примитивные типы данных как двоичные значения в определенном кодировании, это, что отправляет Ваш сервер?
Если не используют StreamReader:
TcpClient _tcpClient = new TcpClient("host", 110);
StreamReader reader =
new StreamReader(new System.Net.Security.SslStream(_tcpClient.GetStream(), true));
Console.WriteLine(reader.ReadToEnd());
Я не совсем уверен, будет ли это работать на Ваше приложение, но я рекомендовал бы смотреть на stunnel:
http://www.stunnel.org
Я использовал его для обертывания существующих соединений TCP в прошлом.