0

Web サイトを実行すると例外メッセージが表示される

「タイプ 'System.DBNull' のオブジェクトをタイプ 'System.String' にキャストできません。」

'return (string)c.Parameters["@vat"].Value;以下のコードの 'の '値' 部分から出てきます。ストアドプロシージャをチェックして、クエリを実行するかどうかを確認しました。実行し、その出力も文字列です。誰でも助けることができます..??

namespace CamOnlineAccess
{
  public class Utilities
  {
    public SqlConnection GetConnection()
    {
        SqlConnection c = new SqlConnection();
        c.ConnectionString = ConfigurationManager.ConnectionStrings["CamOnlineConnectionString"].ConnectionString;
        return c;
    }

    public SqlCommand GetCommandSP(string SPName)
    {
        SqlCommand c = new SqlCommand();
        c.Connection = GetConnection();
        c.CommandType = CommandType.StoredProcedure;
        c.CommandText = SPName;
        c.CommandTimeout = 150;

        return c;
    }
  }
}

public string ViewUserVat(string code)
{
    CamOnlineAccess.Utilities u = new CamOnlineAccess.Utilities();
    SqlCommand c = u.GetCommandSP("dbo.ViewUserVat");

    c.Parameters.AddRange(new System.Data.SqlClient.SqlParameter[] {
        new System.Data.SqlClient.SqlParameter("@code", System.Data.SqlDbType.VarChar,50),
            new System.Data.SqlClient.SqlParameter("@vat",SqlDbType.VarChar, 50, System.Data.ParameterDirection.Output, false, ((byte)(0)), ((byte)(0)), "", System.Data.DataRowVersion.Current, null)});
    c.Parameters["@code"].Value = code;
    c.Connection.Open();
    c.ExecuteScalar();//because we have output parameters
    c.Connection.Close();

    return (string)c.Parameters["@vat"].Value;
 }

保管手順

 ALTER PROCEDURE [dbo].[ViewUserVat] 
-- Add the parameters for the stored procedure here
@code varchar,
@vat varchar(50) output

    AS
SELECT top 1 @vat=vattable from dbo.portfolio 
where owner=@code
4

3 に答える 3

2

@codeストアド プロシージャが常にパラメーターのレコードを検索し、列vattableが null になることはないと仮定して、パラメーター値を直接返します。

ご覧のとおり、これは当てはまりませんDBNull
コードを次のように変更する必要があります

 return (c.Parameters["@vat"].Value == DBNull.Value ? 
              null : 
              c.Parameters["@vat"].Value.ToString());

もちろん、 anullがコードの残りの部分で許可されている/期待される戻り値であると仮定します。
それ以外の場合は、nullを別の許容値 (string.Empty など)に置き換えることができます。

于 2013-01-08T14:12:57.713 に答える
0

以下を使用できます。

return String.Format("{0}",c.Parameters["@vat"].Value);

代わりは。

于 2013-01-08T14:10:25.153 に答える
0
return (string)(c.Parameters["@vat"].Value == DBNull.Value
           ? null
           : c.Parameters["@vat"].Value);
于 2013-01-08T14:11:13.500 に答える