読者です 読者をやめる 読者になる 読者になる

そんなにSQLが嫌いか

あけたら毒ガスが吹き出る箱を開けてしまった気分。

SQL_SELECT   = "SELECT * FROM ";
SQL_COUNT    = "SELECT COUNT(*) FROM ";
SQL_WHERE    = " WHERE "
SQL_ORDER    = " ORDER BY ";
SQL_EQUAL    = " = ";
SQL_AND      = " AND ";
SQL_OR       = " OR ";
...
SQL_UPDATE   = "UPDATE ";
SQL_SET      = " SET ";
...
SQL_ZERO_STR = "''";
SQL_SEPARATOR= ", ";
SQL_LEFT     = "(";
SQL_RIGHT    = ")";
...
SQL_IS_NULL  = " IS NULL ";
SQL_GETDATE  = "GETDATE()";

んで、これを使う側のコード。

StringBuilder sb = new StringBuilder();
sb.Append(SQL_INSERT);
sb.Append(someTable);
sb.Append(SQL_LEFT);
sb.Append(JoinNotNull(SQL_SEPARATOR, cols, vals);
sb.Append(SQL_SEPARATOR);
// 以下各テーブル共通項目
sb.Append("REG_USER");
sb.Append(SQL_SEPARATOR);
sb.Append("REG_DATE");
sb.Append(SQL_SEPARATOR);
sb.Append("REG_ID");
sb.Append(SQL_SEPARATOR);
sb.Append("UPDATE_USER");
sb.Append(SQL_SEPARATOR);
sb.Append("UPDATE_DATE");
sb.Append(SQL_SEPARATOR);
sb.Append("UPDATE_ID");
sb.Append(SQL_RIGHT);
sb.Append(SQL_VALUES);

ダメだ、ギブアップ。まぁこんな感じ。
ちなみに、自分ならせめてこう書く*1

sb.AppendFormat(@"
INSERT INTO {0} ({1}, reg_user, reg_date, reg_id, update_user, update_date, update_id)
         VALUES ({2}, {3}, {4}, {5}, {6}, {7}, {8})",
someTable, JoinNotNull(",", cols, vals),
JoinNotNull(",", params, vals), regUser, regDate, regId, updateUser, updateDate, updateId);

もはやStringBuilderである必要なし。String.FormatでOK.

*1:JoinNotNullってのは独自のヘルパメソッド。このメソッド中のコメント間違ってるんですけど・・・