Я пытаюсь вставить нелатинские данные в базу данных sqlite, используя переменные связывания, используя System.Data.SQLite.когда я вставляю данные без переменных связывания, все в порядке:
cmd.CommandText = "INSERT INTO mytab VALUES (/" некоторые нелатинские данные / ")";cmd.ExecuteNonQuery ();
, когда я пытаюсь использовать переменные связывания, данные вставляются, но кодировка плохая, и все, что я вижу, это что-то вроде ???или какие-то странные буквы.Я прочитал решения здесь и попытался использовать PRAGMA ENCODING = "UTF-8" в строке подключения.также я пытался закодировать его из «ISO-8859-1» в UTF-8, а также из кодировки по умолчанию в UTF-8.Ничто не решает проблему.
вот мой код, пожалуйста, скажите мне, что я делаю неправильно:
public void addItem (List updateProperties) {
try
{
_Conn.Open();
SQLiteCommand oCmd = new SQLiteCommand ( "BEGIN", _dtflsConn );
oCmd.ExecuteNonQuery ( );
oCmd.Dispose ( );
foreach (List<string> lst in updateProperties)
{
string table = lst[0];
lst.RemoveAt(0);
//building query
oCmd = new SQLiteCommand ( "INSERT INTO " + table + " VALUES (", _dtflsConn);
foreach (string str in lst)
oCmd.CommandText += "?,";
oCmd.CommandText = (oCmd.CommandText.Substring(0, oCmd.CommandText.Length -1)) + ");";
int i = 0;
foreach ( string str in lst )
{
var val = oCmd.CreateParameter();
val.ParameterName = i.ToString();
//Encoding
byte[] b = Encoding.Default.GetBytes(str);
b = Encoding.Convert(Encoding.Default, Encoding.UTF8, b);
val.Value = b;
oCmd.Parameters.Add(val);
i++;
}
//executing
oCmd.ExecuteNonQuery();
oCmd.Dispose();
}
oCmd = new SQLiteCommand ( "END", _dtflsConn);
oCmd.ExecuteNonQuery ( );
oCmd.Dispose ( );
_Conn.Close();
}
catch (Exception e)
{
_Conn.Close();
logger.LogMessageToFile(e.Message);
}
}