dzięki, ale problem ciągle się pojawia. w mojej bazie rekordy w kolumnie nazwa mają spacje np. advocat Gdański 500
Po wybraniu z comboboxa tej wartosci pojawia się błąd:
An unhandled exception of type 'System.Data.SQLite.SQLiteException' occurred in System.Data.SQLite.dll
Additional information: SQL logic error or missing database
near "Gdański": syntax error
Kiedy usunę spacje z rekordu to pojawia się:
An unhandled exception of type 'System.Data.SQLite.SQLiteException' occurred in System.Data.SQLite.dll
Additional information: SQL logic error or missing database
no such column: advocatGdański500
ktoś ma jakiś pomysł?
Coś kolego kręcisz bo spacje nie mają nic wspólnego. Posprawdzaj ty dokładnie ....
Wszystkie sposoby składania zapytań i parametrycznie działają ze spacjami ???.
Pewnie również nie sprawdziłeś swojej funkcji składającej w moim listingu jest poprawiona.
using System;
using System.Diagnostics;
using System.Windows.Forms;
using System.Data;
using System.Data.SQLite;
using System.IO;
using System.Linq;
using System.Text;
class Script
{
public static string roaming = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
public static string configPath = roaming+@"\\LottoCad232R\\config\\filterConfig.yml";
public static string connectionString = @"Data Source = " + roaming + @"\\LottoCad232R\\sqlite\\LC2014.sqlite;Version=3";
public static SQLiteConnection openDatabase() {
string connection_string = connectionString;
return (new SQLiteConnection(connection_string));
}
public static string wczytaj_tekst_box(string nazwaTabeli, string kod, string nazwa, string combo)
{
string sqlString = null;
sqlString = "SELECT " + kod + " FROM " + nazwaTabeli + " WHERE " + combo + " LIKE '" + nazwa+"';";
return sqlString;
}
[STAThread]
static public void Main(string[] args)
{
SQLiteConnection sql_con = openDatabase();
sql_con.Open();
Console.WriteLine("Moje sklejanie");
string sql = string.Format("SELECT value from advocat WHERE name LIKE '{0}'", "advocat Gdański 500");
Console.WriteLine(sql);
SQLiteCommand sql_cmd = new SQLiteCommand(sql, sql_con);
SQLiteDataReader sqReader = sql_cmd.ExecuteReader();
while (sqReader.Read()) {
Console.WriteLine("rekord = {0}",sqReader.GetDouble(0));
}
Console.WriteLine("Twoje sklejanie");
string comboBox1form1Text = "advocat Gdański 500";
sql = wczytaj_tekst_box("advocat","value", comboBox1form1Text, "name");
Console.WriteLine(sql);
sql_cmd = new SQLiteCommand(sql, sql_con);
sql_cmd.CommandType = System.Data.CommandType.Text;
sqReader = sql_cmd.ExecuteReader();
while (sqReader.Read()) {
Console.WriteLine("rekord = {0}",sqReader.GetDouble(0));
}
Console.WriteLine("Bez sklejania, zalecane bo odporne na wstrzyknięcia.");
sql = ("SELECT value from advocat WHERE name LIKE @isLike");
sql_cmd = new SQLiteCommand(sql, sql_con);
sql_cmd.Parameters.Add(new SQLiteParameter("@isLike", DbType.String) {Value = "advocat Gdański 500"});
Console.WriteLine("zapytanie:{0}, parametr({1}) = {2}",sql_cmd.CommandText,sql_cmd.Parameters[0].ParameterName, sql_cmd.Parameters[0].Value);
SQLiteDataReader sqR = sql_cmd.ExecuteReader();
while (sqR.Read()) {
Console.WriteLine("rekord = {0}",sqR.GetDouble(0));
}
}
}
nawet zbudowałem tabele z tym trunkiem Gdańskim :-)
DROP TABLE IF EXISTS "advocat";
CREATE TABLE "advocat" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL UNIQUE , "name" VARCHAR, "value" DOUBLE);
INSERT INTO "advocat" VALUES(1,'advocat Gdański 500',500);
INSERT INTO "advocat" VALUES(2,'advokat Zielonogórski 1000',1000);
wynik powyższego :
Moje sklejanie
SELECT value from advocat WHERE name LIKE 'advocat Gdański 500'
rekord = 500
Twoje sklejanie
SELECT value FROM advocat WHERE name LIKE 'advocat Gdański 500';
rekord = 500
Bez sklejania, zalecane bo odporne na wstrzyknięcia.
zapytanie:SELECT value from advocat WHERE name LIKE @isLike, parametr(@isLike) = advocat Gdański 500
rekord = 500
pozdr AK