私の問題はこれです。データコンテキストExecuteQuery(文字列クエリ、paramsオブジェクト[]パラメータ)(here)を使用している場合、どのような形や形であれnullを渡すことはできません。これを開始したパラメータはSQLのnvarcharパラメータで、nullを許可する必要があります。DataContext.ExecuteQuery <TEntity>とnull値
答えとしてマークされた "use DBNull.Value"を持っていたstackoverflowでこのarticleを読んでいたので、私はそれを試みましたが、何もしませんでした。 。ここで
var db = new Test1DataContext(Properties.Settings.Default.TestConnectionString);
var query = "EXEC UpInsertTest4 {0}, {1}";
// Works fine
var list1 = new List<object> { 1, "1" };
db.ExecuteQuery<UpInsertTest4Result>(query, list1.ToArray());
// Doesn't work
var list2 = new List<object> { 1, DBNull.Value };
db.ExecuteQuery<UpInsertTest4Result>(query, list2.ToArray());
は私が受け取る様々なエラーです:
null : A query parameter cannot be of type 'System.Object'.
default(string) : A query parameter cannot be of type 'System.Object'.
DBNull.Value : Unexpected type code: DBNull (which give this as a stack trrace)
at System.Data.Linq.SqlClient.SqlTypeSystem.Sql2005Provider.From(Type type, Nullable`1 size)
at System.Data.Linq.SqlClient.SqlTypeSystem.Sql2008Provider.From(Type type, Nullable`1 size)
at System.Data.Linq.SqlClient.SqlTypeSystem.ProviderBase.From(Type type)
at System.Data.Linq.SqlClient.SqlTypeSystem.ProviderBase.From(Object o)
at System.Data.Linq.SqlClient.SqlFactory.ValueFromObject(Object value, Type clrType, Boolean isClientSpecified, Expression sourceExpression)
at System.Data.Linq.SqlClient.QueryConverter.VisitConstant(ConstantExpression cons)
at System.Data.Linq.SqlClient.QueryConverter.VisitInner(Expression node)
at System.Data.Linq.SqlClient.QueryConverter.VisitExpression(Expression exp)
at System.Data.Linq.SqlClient.QueryConverter.VisitUserQuery(String query, Expression[] arguments, Type resultType)
at System.Data.Linq.SqlClient.QueryConverter.VisitMethodCall(MethodCallExpression mc)
at System.Data.Linq.SqlClient.QueryConverter.VisitInner(Expression node)
at System.Data.Linq.SqlClient.QueryConverter.ConvertOuter(Expression node)
at System.Data.Linq.SqlClient.SqlProvider.BuildQuery(Expression query, SqlNodeAnnotations annotations)
at System.Data.Linq.SqlClient.SqlProvider.System.Data.Linq.Provider.IProvider.Execute(Expression query)
at System.Data.Linq.DataContext.ExecuteMethodCall(Object instance, MethodInfo methodInfo, Object[] parameters)
at System.Data.Linq.DataContext.ExecuteQuery[TResult](String query, Object[] parameters)
at ConsoleApplication1.Program.Main(String[] args) in E:\TestBed\Testbed\ConsoleApplication1\Program.cs:line 36
at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.ThreadHelper.ThreadStart()
ここ
は、私は(これは単なる概念をテストすることです、ノート)を実行しようとしていたサンプルコードです
私が読んだことから、私はこれとの戦いの戦いを戦うことができました!これは私の最後の溝の試みです!
多くのありがとう、
クリス。
)は、あなたが新しいのNullable(にそれを設定しようとしたことがありますか? –
はい、私は持っている必要があります、ごめんなさい!文字列コンパイル時のエラーでは機能しません: "型 '文字列'は、汎用型またはメソッド 'System.Nullable'でパラメータ 'T'として使用するには、 。 –
Bertie