Кресты / Говнокод #9219 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 31
  32. 32
  33. 33
  34. 34
  35. 35
  36. 36
  37. 37
  38. 38
  39. 39
  40. 40
  41. 41
  42. 42
  43. 43
  44. 44
  45. 45
  46. 46
  47. 47
  48. 48
  49. 49
  50. 50
  51. 51
  52. 52
  53. 53
BOOL CMarkup::Search(CString OprName, CString strSQL, short nType)
{

...
	
	sCommandLine = sPath.Left(nPos)+ _T("\\Getorder.exe search ")+OprName+_T(" ")+strSQL+_T(" ")+strType;
	::wcscpy(cCommandLine, sCommandLine);

	BOOL ret = CreateProcess(NULL, cCommandLine, NULL, NULL, FALSE, CREATE_NO_WINDOW, NULL, NULL, &si, &pi);
	if (ret) {
		CloseHandle(pi.hThread );						//Close the thread handle as soon as it is no longer needed.
		WaitForSingleObject(pi.hProcess, INFINITE);		//Suspend our execution until the child has terminated.
		GetExitCodeProcess(pi.hProcess ,&dwExitCode);	//The child process terminated;get its exit code.
		//if(dwExitCode == STILL_ACTIVE) TerminateProcess(pi.hProcess, 0);
		CloseHandle(pi.hProcess);						//Close the process handle as soon as it is no longer needed.
	}

	CString ss,s;
	ss = _T("s.txt");

	CStdioFile in;
	if(!in.Open (sPath+_T("\\")+ss,CFile::modeRead | CFile::typeBinary))
		return TRUE;

	while(in.ReadString(s))
	{
		s.TrimLeft();
		s.TrimRight();
		if(s != _T("**********")) continue;

		ORDERTYPE m_OrderData;

		in.ReadString(s);
		s.TrimLeft();
		s.TrimRight();
		m_OrderData.OprName = s;

		in.ReadString(s);
		s.TrimLeft();
		s.TrimRight();
		m_OrderData.Language =s;

		in.ReadString(s);
		s.TrimLeft();
		s.TrimRight();
		m_OrderData.OrderNo =s;

...

	}

	in.Close();
	DeleteFile(sPath+_T("\\")+ss);

Прислали исходники приложения на C++ с MFC. Там просто один сплошной ГК от начала и до конца, но это место просто убило.

Задача - найти заказ в базе данных MSSQL по SQL-запросу. Для этого они запускают отдельное приложение .NET, которое подключается к базе и дампит запись в текстовый файл, а приложение C++ из него читает.

Запостил: someone someone, (Updated )

Комментарии (13) RSS

  • Вброшу.
    Это Unix-way. В лялихе так принято: использовать мелкие программки для решения задач. Если уже есть прожка, выполняющая поиск нужным образом, то именно её и вызываем из нашей. Результат получаем через текстовый файл, всё верно.
    Так что писал явно луноход, перешедший на винду.
    😀
    Ответить
      • Эти чудики ниасилили:

        1. Обращение к MSSQL из C++
        2. Вызов .NET DLL через COM Interop, если уж ниасилили 1
        3. Ну ладно, не знают про 1 и 2, но про пайпы-то должны знать, это святое!
        Ответить
    • это говновэй в N слоев
      на верхнем слое говновей в том, что результат складывается в текстовый файл, имя которого явно захардкожено как в этом коде, так и в коде дотнетовской отрыжки, и поэтому надо как то следить чтобы никто кроме нас не запустил эту утилиту параллельно, и никто кроме нас не смог почитать и удалить файл - имеем заведомо однопоточность, уверен что с нерешенными конфликтами
      на слое пониже - вызывается утилита через командную строку, что крайне медленно и небезопасно (вся безопасность сводится к правам на запуск утилиты пользователем текущего процесса), хотя существует способ засунуть дотнетовский код в длл и вызывать методы из оной, затем приходится тупейшим способом парсить текстовый файл
      на слое еще пониже - кто и на каком этапе делает авторизацию к базе? всё в утилите? тоже захардкожено?
      на слое еще пониже - тотальный говнокод и низкая культура реализации даже задуманного
      ну и "не можем открыть файл с результатами - ну и пох, возвратим TRUE" - умилило
      Ответить
    • >> C++ с MFC ... MSSQL по SQL-запросу ... .NET
      > Это Unix-way. В лялихе так принято
      Ути-пути
      Ответить
        • У вас часть мозга, ответвественная за телепатию, непомерно разрослась.
          Ответить
    • Хе-хе-хе. Ай да вбросил!
      PS. Я хотел минусануть но промазал.
      Ответить
  • интересно, а сколько в оригинальной функции строк?
    Ответить
    • 357. Из них 275 - тупой копипаст строк 33-46 из приведённого куска.

      И этот же способ обращения к БД в том же cpp-файле методом копипаста распространён ещё на несколько других таблиц...
      Ответить
      • Требуй долива... после отстоя пены!^W^W^Wмолока за вредность.
        Ответить
  • ч.X?W"IW:C$TJ.II,X"LN T N(H(W(S.ZE?E(T:E?L:IT?W)H,Y!H,E"Q.E(Y(C)CS?P"H?U(O:PQ:A!A?T!T Y(X E)E:V,A,J.E,T"U T,R"RM.F?X(P:E H:C.C:S)K Q"EIO.O)P,U(E.S"M,A)RD"R!Y.R?X F:P(O)I$Z"B"KR!O:V:X.Q,B)J,I(G,I!D F,I"P!O"O(M!C F"T"B)TZ F:R)F.I!C!E J$M"D:V$P:T"B"H,M!P.L(A:V.SE$FN$B?E.T"S.C:I!E$U!F(W O,SA.O X C!R?T:B P(L.OE!L QX.A:P"D.Y YF.R(P J,W$KF(P?A!P.I!X(O?HY.D$D:H)Q!O Q"K,O$G)V(E U)J H W"N.R,O)H:O$Y)N$Q!P,M S$B)F"S(U.Q,T$Q$Y:G?C(N$K X!M?L)A)U,V?C:H(C?L:M(F$C)T?R(I:KP!K:V$OR!X,U(O:A?MC"V,DX)N!K!I!UH L(S B?B)P"W:HX K)T!P)Z$K!A(X"QK,I:W(G)H(U:P"JI?T.N,U(O,E?S?H$L?Z,V U?E:G"C!V$S:N:H,F.C$J:O I A O)K:I(P?T?B,A(I,X,H?EG$I)H"H.C!A:I(F!X?Y(K?I"X!X(T!K)N$L(A!S.G J,U!N.Q:P:H I!N?A)E:L"E.ZO.C,A!H,K(P?L U?S(P!K S,E"T R.B G(S L!E$AX?S N)VJ"U$U O$O!F B,A.R.C:H O:G.R,W"W!B)Y(W(B C E?C U,Y:E?F?K M"R:R(R"Y$Z!S,C H:E.O:I?H Q)J?F!ME K,U?Q.X$W)N$H!U"A H$A)K!FF(D Z P?A,P PGK?U$OV"H.GYW!D(B B N)M)U(W A"D)FQ"M$U$A"F!L.G?C.Z!OP!L$BN"U$Y"W(F!ZJ)H!Q:R?H$O$G(B.TB Q.AH"Q?G)K?N:Z(W:Q)K C.L.S:A$M(P)IA.E,K.H,L.F!X(K?CF?M(T(V:S$X$N$C!S,Z:E X(Z"ZM(Z!P T?T"M$J:C N$D AX)S)O?Y?W:P A(A!W Y,E(AW)O.U.A?N N)E D?B"I!T,X J,K!N(J,R)U"W$E?M$K$S.T Q?T,P$E?SE D M.C"A:JBS!L?Y!Z)C$HC)I B X$L"F(GY?X)P(X$CK,M!FI)A(GЦGNTSRTAGMNNWRCAVXZXMJIFQQTSKLFRWLTBRMLMFTBFKDSQKRJVTIJDCIIQXBGTBAMIFROJOKYMDYBOBKXUDPMWLMXFFZSCPERYYSWWMGFDRLEGWKBEETXWWNFQXVUZHTPYGGMNWWQHNODDWHDEPTZBLHSHJNWULDHXAQDIHBBVLQRZRYQQCIRBXMC
    Ответить

Добавить комментарий

Семь раз отмерь — один отрежь, guest!

    А не использовать ли нам bbcode?


    8