Diskuze: DB Aplikace - oddělovač záznamu
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.


Nevim, jak se to dela v c#, ale obvykle se hodnoty escapuji.
sloupce a nazvy tabulek jako escapeKey(), hodnoty jako escapeValue().
UPDATE customers SET address = 'Pune' WHERE id = 6
UPDATE `customers` SET `address` = 'Pune' WHERE `id` = 6 -- mysql
customers, address, id jsou keys. Nesmi obsahovat text ` a tento text je
nutne odstranit nebo escapovat
'Pure', 6 jsou hodnoty, values. Textova hodnota nesmi obrahovat apostrof a ten
musis escapovat. ciselna se pise bez apostrofu, ale mnoho db to veme i v
apostrofech. Ciselna hodnota nesmi mit v sobe text ani jiny znak. Ty musis
odstranit.
UPDATE `customers` SET `address` = 'P\'u\'n\'e' WHERE `id` = 6 -- mysql apostrofy.
V pripade formatu csv je oddelovac sloupcu carka ',' Zadny dalsi text nesmi obsahovat carku. Uzavreji stringu byva dvojita uvozovka ". zavreny string carku muze obsahovat. Text uvnitr nesmi obsahovat uvozovku. Priklad (excel dokaze exportovat do csv, ale oddelovac je strednik):
"aaa","bbb","ccc"
0, 5 , "text,text"
0, 5 , "te""xt,te""xt" - apostrof se zdvojuje
Cili, ve tvem pripade, bud pouzivas sql-driver a ten ma moznost escapovani
pres nejakou funkci nebo to dela dokonce sam v pripade parametru. A nebo si to
musis najit, jaka pravidla pro excapovani pouziva tvuj sql driver a udelat to
sam.
Ve tvem pripade by mohlo stacit mozna pridat tam zpetne lomitko
UPDATE customers SET address = 'Pune' WHERE id = 6
"UPDATE customers SET address = '" + "Pune" + "' WHERE id = 6" - spojovani retezcu (ve VS mozna pomoci &)
"UPDATE customers SET address = '" + "Pu'ne" + "' WHERE id = 6" - apostrof tady by to rozhodil
"UPDATE customers SET address = 'Pu' ne' WHERE id = 6" - apostrof tady by to rozhodil, platne by bylo address = 'Pu'
x = "Pu\'ne" -- takto nebo dve lomitka
x = "Pu\\'ne"
"UPDATE customers SET address = '" + x + "' WHERE id = 6" - apostrof tady by to rozhodil
Ty mezery, mozna tam nemas apostrofy pro string. Mezera by sql prikaz nemela narusit.
Jaroslav Smrž:14.2.2020 15:48
Nepomohlo by jen něco typu
string[] QueryArray = new string[];
Ten záznam mam takto:
//Update
public static bool UpdateRecord(string tblName, string dbName, string iValues, string iColumns = null, string cField=null, string cValue=null)
{
if (!File.Exists(Application.StartupPath + "\\" + dbName + "\\" + tblName + ".fdb"))
return false;
else
{
FileStream fsr = new FileStream(Application.StartupPath + "\\" + dbName + "\\" + tblName + ".fdb", FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite, 10000, FileOptions.Asynchronous);
FileStream fsw = new FileStream(Application.StartupPath + "\\" + dbName + "\\" + tblName + ".tmp", FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite, 10000, FileOptions.Asynchronous);
StreamWriter sw = new StreamWriter(fsw);
StreamReader sr = new StreamReader(fsr);
fsw.Seek(0, SeekOrigin.End);
string tCol = sr.ReadLine();
string[] ColsArray = tCol.Split(new char[3] { '├', '┤', '│' }, StringSplitOptions.RemoveEmptyEntries);
sw.Write(tCol);
string[] iColumnsArray = null;
int TempiCols = 0;
string modifiedRow = "";
string[] iValuesArray = iValues.Split(new char[1] { ',' }, StringSplitOptions.RemoveEmptyEntries);
TempiCols = iValuesArray.Length;
if (iColumns != null)
{
iColumnsArray = iColumns.Split(',');
TempiCols = iColumnsArray.Length;
}
if (cField != null || cValue != null)
{
int cfi = Array.IndexOf(ColsArray, cField);
while (!sr.EndOfStream)
{
string TempStr = sr.ReadLine();
string[] RowArray = TempStr.Split(new char[3] { '└', '┘', '│' }, StringSplitOptions.RemoveEmptyEntries);
if (RowArray[cfi].Trim() == cValue.Trim())
{
modifiedRow = "";
int k = 0;
for (int i = 0; i < ColsArray.Length; i++)
{
if (iColumnsArray != null)
{
for (int j = 0; j < TempiCols; j++)
{
if (ColsArray[i] == iColumnsArray[j])
{
modifiedRow += iValuesArray[j]+"~";
k++;
break;
}
else
{
if (j == TempiCols - 1)
{
modifiedRow += RowArray[i] + "~";
break;
}
}
}
}
}
string[] TempcValues = modifiedRow.Split('~');
string TempModStr = "└";
for (int j = 0; j < TempcValues.Length; j++)
{
if (TempcValues[j].Trim() == "")
TempcValues[j] = "■";
if (j < TempcValues.Length - 1)
{
TempcValues[j] += "│";
}
TempModStr += TempcValues[j];
}
TempModStr += "┘";
TempStr = TempModStr;
}
sw.Write(sw.NewLine + TempStr);
}
}
else
{
while (!sr.EndOfStream)
{
string TempStr = sr.ReadLine();
string[] RowArray = TempStr.Split(new char[3] { '└', '┘', '│' }, StringSplitOptions.RemoveEmptyEntries);
modifiedRow = "";
int k = 0;
for (int i = 0; i < ColsArray.Length; i++)
{
for (int j = 0; j < TempiCols; j++)
{
if (k<=iValuesArray.Length-1)
{
modifiedRow += iValuesArray[j]+"~";
k++;
break;
}
else
{
if (j <= TempiCols - 1)
{
modifiedRow += RowArray[i]+"~";
break;
}
}
}
}
//dale;
string[] TempcValues = modifiedRow.Split('~');
string TempModStr = "└";
for (int j = 0; j < TempcValues.Length; j++)
{
if (TempcValues[j].Trim() == "")
TempcValues[j] = "■";
if (j < TempcValues.Length - 1)
{
TempcValues[j] += "│";
}
TempModStr += TempcValues[j];
}
TempModStr += "┘";
TempStr = TempModStr;
sw.Write(sw.NewLine + TempStr);
}
}
sw.Close();
sr.Close();
fsr.Close();
fsw.Close();
File.Copy(Application.StartupPath + "\\" + dbName + "\\" + tblName + ".tmp", Application.StartupPath + "\\" + dbName + "\\" + tblName + ".fdb", true);
File.Delete(Application.StartupPath + "\\" + dbName + "\\" + tblName + ".tmp");
return true;
}
}
Asi to bude někde tu, třeba něco doplnit nebo tam mám něco
navíc...Nevím
A děkuji za rady...:)
Zobrazeno 4 zpráv z 4.