リード開発メモ

大阪のソフトウェア会社です。 技術的な事柄についてのメモとしてブログを始めます。

2013年02月

ASP.NET フォームキーの最大数の制限

過去に作成した ASP.NET のサイトで「更新ボタンを押したらエラーになる」との報告がきた。
スタックトレースは以下のようなもの。


'XXXX' アプリケーションでサーバー エラーが発生しました。
オブジェクトの現在の状態に問題があるため、操作は有効ではありません。
説明: 現在の Web 要求を実行中に、ハンドルされていない例外が発生しました。エラーに関する詳細および
例外の発生場所については、スタック トレースを参照してください。
例外の詳細: System.InvalidOperationException: オブジェクトの現在の状態に問題があるため、操作は
有効ではありません。
ソース エラー:
現在の Web 要求の実行中にハンドルされていない例外が生成されました。障害の原因および発生場所に関する
情報については、下の例外スタック トレースを使って確認できます。
スタック トレース:
[InvalidOperationException: オブジェクトの現在の状態に問題があるため、操作は有効ではありません。]
   System.Web.HttpValueCollection.FillFromEncodedBytes(Byte[] bytes, Encoding encoding) +11373279
   System.Web.HttpRequest.FillInFormCollection() +329

[HttpException (0x80004005): URL にエンコードされたフォーム データが有効ではありません。]
   System.Web.HttpRequest.FillInFormCollection() +11487362
   System.Web.HttpRequest.get_Form() +157
   Microsoft.Web.Infrastructure.DynamicValidationHelper.<>c__DisplayClass12.b__e() +63
   Microsoft.Web.Infrastructure.DynamicValidationHelper.<>c__DisplayClass12.b__11() +20
   Microsoft.Web.Infrastructure.DynamicValidationHelper.DeferredCountArrayList.get_Count() +20
   System.Web.HttpRequest.ValidateNameValueCollection(NameValueCollection nvc, RequestValidationSource requestCollection) +34
   System.Web.HttpRequest.get_Form() +212
   System.Web.Mvc.HttpRequestExtensions.GetHttpMethodOverride(HttpRequestBase request) +160
   System.Web.Mvc.AcceptVerbsAttribute.IsValidForRequest(ControllerContext controllerContext, MethodInfo methodInfo) +55
   System.Linq.Enumerable.All(IEnumerable`1 source, Func`2 predicate) +149
   System.Web.Mvc.ActionMethodSelector.RunSelectionFilters(ControllerContext controllerContext, List`1 methodInfos) +428
   System.Web.Mvc.ReflectedControllerDescriptor.FindAction(ControllerContext controllerContext, String actionName) +140
   System.Web.Mvc.ControllerActionInvoker.FindAction(ControllerContext controllerContext, 
ControllerDescriptor controllerDescriptor, String actionName) +27
   System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName) +148
   System.Web.Mvc.Controller.ExecuteCore() +159
   System.Web.Mvc.ControllerBase.Execute(RequestContext requestContext) +335
   System.Web.Mvc.<>c__DisplayClassb.b__5() +62
   System.Web.Mvc.Async.<>c__DisplayClass1.b__0() +20
   System.Web.Mvc.<>c__DisplayClasse.b__d() +54
   System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +469
   System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +375

確かに最近変更は行ったがまったく関係のない箇所だったので、調べてみたら Microsoft セキュリティ更新プログラム MS11-100 による影響だった模様。
下記のページの解決方法に従って、Web.config に設定を追加して解決。
http://support.microsoft.com/kb/2661403/ja


<configuration>
<appSettings>
<add key="aspnet:MaxHttpCollectionKeys" value="2000" />
</appSettings>
</configuration>

Excel シート一覧を取得

Excel の資料を見ているのだが、シートの数が多く、シート一覧を書き出すのが面倒。
ここ(Excelシート名一覧の取得方法)にいい方法があったので、転記させてもらう。


ALT+F11を押下(VBAエディタが起動) 

CTRL+Gを押下(イミディエイトウインドウが起動) 

「For Each i In ThisWorkbook.Sheets: debug.print i.name : next i」をタイプしてEnterを押下 

シート名をコピー 

VBAエディタを閉じる

Excel 2010 でブックの共有を解除する

[校閲]タブの[ブックの共有]を選択する。
[ブックの共有]ダイアログで、[複数のユーザーによる同時編集と、ブックの結合を許可する]のチェックを外す。

SyntaxHighlighter のクラス指定

SyntaxHighlighter のクラス指定をまとめておく。

Brush name Brush aliases File name
ActionScript3 as3, actionscript3 shBrushAS3.js
Bash/shell bash, shell shBrushBash.js
ColdFusion cf, coldfusion shBrushColdFusion.js
C# c-sharp, csharp shBrushCSharp.js
C++ cpp, c shBrushCpp.js
CSS css shBrushCss.js
Delphi delphi, pas, pascal shBrushDelphi.js
Diff diff, patch shBrushDiff.js
Erlang erl, erlang shBrushErlang.js
Groovy groovy shBrushGroovy.js
JavaScript js, jscript, javascript shBrushJScript.js
Java java shBrushJava.js
JavaFX jfx, javafx shBrushJavaFX.js
Perl perl, pl shBrushPerl.js
PHP php shBrushPhp.js
Plain Text plain, text shBrushPlain.js
PowerShell ps, powershell shBrushPowerShell.js
Python py, python shBrushPython.js
Ruby rails, ror, ruby shBrushRuby.js
Scala scala shBrushScala.js
SQL sql shBrushSql.js
Visual Basic vb, vbnet shBrushVb.js
XML xml, xhtml, xslt, html, xhtml shBrushXml.js

C# で mdb のバージョンを調べる(その2)

前回 の方法では、古い mdb の場合、エラーになることがある。
そこで、エラーになった場合は DAO を使う方法でも試すとよさそうだ。

まず、参照の追加を行っておく。バージョンは環境に依る。
 COMタブのMicrosoft DAO 3.6 Object Library

string GetAccessVersion2(string fileName)
{
	DAO.DBEngine dbe = new DAO.DBEngine();
	DAO.Database db = dbe.OpenDatabase(fileName);
	DAO.Properties props = db.Properties;

	string accessVersion = "";
	foreach (DAO.Property prop in props)
	{
		if (prop.Name == "AccessVersion")
		{
			accessVersion = prop.Value;
			break;
		}
	}

	if (accessVersion.StartsWith("02"))
	{
		return "Access2.0";
	}
	else if (accessVersion.StartsWith("06"))
	{
		return "Access95";
	}
	else if (accessVersion.StartsWith("07"))
	{
		return "Access97";
	}
	else if (accessVersion.StartsWith("08"))
	{
		return "Access2000";
	}
	else if (accessVersion.StartsWith("09"))
	{
		return "Access2002";
	}

	return "Unknown";
}

アクセスカウンター
  • 今日:
  • 昨日:
  • 累計:

livedoor 天気