2

このストアドプロシージャがあります

create PROCEDURE spgetoutpatientidbyinpatientid
@pinpatientid int
AS

BEGIN

select  Patient_ID 
    from tblPatientAdmissionDetails 
    where ID=@pinpatientid and Status=1
END
GO

この条件が間違っていると、null例外が発生します。少なくともnull値などを返したいのですが、どうすればこのエラーを回避できますか。私のコードでは

<pre lang="c#">string  ds = UserDataBase.ExecuteScalar(Command).ToString();</pre>

どうすればSQLクエリを変更できますか?または、どうすればこの例外を回避できますか

4

5 に答える 5

2

return -1あなたの状態の記録がない場合は、このように手順を更新すると役立つ場合があります。

create PROCEDURE spgetoutpatientidbyinpatientid
@pinpatientid int
AS

BEGIN

  if exists( select  Patient_ID from tblPatientAdmissionDetails 
       where ID=@pinpatientid and Status=1) 
  begin
      select  Patient_ID from tblPatientAdmissionDetails 
       where ID=@pinpatientid and Status=1)
  end
  else 
  begin
      select -1 
  end
END
GO
于 2012-10-26T08:19:37.253 に答える
1

1つのアプローチ:

declare @bogus_int int, @result int
set @bogus_int = -1000

select @result = Patient_ID 
from tblPatientAdmissionDetails 
where ID=@pinpatientid and Status=1

select coalesce( @result, @bogus_int )
于 2012-10-26T08:21:30.850 に答える
0

C#から

string ds = "";
object val = UserDataBase.ExecuteScalar(Command);
if(val != null)
   ds = val.ToString();
于 2012-10-26T08:22:47.170 に答える
0

行を返さないことは、SPレベルでは実際にはエラーではありません。ここでSPを変更しないことをお勧めします。実際には、それはあなたがそれをどのように呼ぶか、そして行なし対ヌル対データをチェックすることに帰着します。

コマンドを使用してこれを行うことができますが、少し面倒です。ここでの私の好みは単純化することです。たとえば、既存のストアドプロシージャを使用してdapperで呼び出すには、次のようにします。

int id = 123;
var activePatient = connection.Query<int>(
    "spgetoutpatientidbyinpatientid", // command
    new { pinpatientid = id }, // parameters
    commandType: CommandType.StoredProcedure).Single();

connection通常のADO.NET接続(SqlConnectionなど)はどこにありますか。一致するものがゼロまたは複数ある場合、LINQを使用するSingle()と自動的に例外がスローされます。それ以外の場合activePatientは、返された列が含まれます。<int>ここをに置き換えて<Patient>、オブジェクトモデル全体に​​データを取り込むことができることに注意してください。

于 2012-10-26T08:51:45.247 に答える
-1
string  ds = String.Format("{0}", UserDataBase.ExecuteScalar(Command));
于 2012-10-26T08:27:15.533 に答える