2009-04-21 6 views
0

私はこのSPの実行をしようとしています:C#3.0のストアドプロシージャメソッドでchar nullを渡すにはどうすればよいですか?

myDataContext.InsertEvent(codEvent, dateOfEvent, statusOfEvent); 

codEventはintです。 dateOfEventはDateTimeです。 statusOfEventはcharです。

statusOfEvent nullを渡すと、Visual Studioでエラーがスローされます。そして、私のSPはテーブルのようにヌル可能な文字を受け取ります。

私もこれを行うにしようとしました:...

感謝を

char? statusOfEvent= null; 
     if (!String.IsNullOrEmpty(f["statusOfEvent"])) 
      statusOfEvent= Convert.ToChar(f["statusOfEvent"]); 

をしかし、それはまた、エラーがスローされます!

私はこの三元表現を行うにしようとしました:

!String.IsNullOrEmpty(f["statusOfEvent"]) ? Convert.ToChar(f["statusOfEvent"]) : DBNull.Value 

をしかし、それはあるが

「は文字とはDBNullの間には暗黙の型変換されていない」と私はまた、*」を見ているという.dbml 「designer.csファイルと私のSPの方法は、このラインを持っています

[Parameter(DbType="Char(1)")] System.Nullable<char> statusOfEvent 
+0

ですdbmlデザイナーのコードを直接! DBMLデザイナを使用してエンティティを編集し、コードを自動生成させます。エラーがスローされたときに、それがうまくいくかどうかについての詳細を提供できますか? –

答えて

8

私はあなたがDBNull.Valueではなくnullが必要と考えています。

更新
使用するにはどこが他の賢明なパスnullがかもしれませんが、あなたはそれを渡します。したがって、statusOfEventがヌル入力可能であると仮定すると、以下を行うことができます。

myDataContext.InsertEvent(
    codEvent, 
    dateOfEvent, 
    statusOfEvent ?? DBNull.Value); 

しかし、InsertEventは、このパラメータの有効な入力として、それを受け入れる必要があるだろう。ストアドプロシージャを記述するためにXSDデータセットのような.NETサポートを使用している場合。このパラメータを変更して、char?charから受け入れるように変更することができます。その後、nullを渡すことができるはずです。基本となるシステムでは、DBNull.Valueに変換されます。このシナリオでは、次のようにコールを残すことができます。

myDataContext.InsertEvent(
    codEvent, 
    dateOfEvent, 
    statusOfEvent); 

これはLinq2Sqlでも有効です。 Linq2Sqlオブジェクトのストアドプロシージャの表現を変更するには、dbmlを開き、ストアドプロシージャのプロパティを編集する必要があります。

+0

しかし、このDBNullはどのように使用できますか? – AndreMiranda

+0

こんにちはジェフ!私はLinqToSqlを使用しています!私はそれを言い忘れた! – AndreMiranda

0

DBNull.Valueのは...私は、パラメータとして(NULL可能ブール値である)のisActiveを渡していますどのようにここで

がある...そのデータベースが期待するものは編集しないでください

_ExecutedSP = new StoredProcedure("EvaluationType_GetList", base._SPInputOutput); 
if (this.IsActive == null) 
{ 
    _ExecutedSP.AddParameter("@IsActive", SqlDbType.Bit, DBNull.Value); 
} 
else 
{ 
    _ExecutedSP.AddParameter("@IsActive", SqlDbType.Bit, this.IsActive); 
} 
関連する問題