1

C# SqlCommand.ExecuteScalar() は常に値 0 のオブジェクトになるようです。SQL Server 2012 を使用しています。これはすべてのストアド プロシージャで発生しています。非常に簡単な例を次に示します。

CREATE PROCEDURE [dbo].[sp_IsUnitPackaged] 
    @Serial varchar(20)
AS
BEGIN
    SET NOCOUNT ON
    SELECT COUNT(serial_number)
    FROM dbo.t_pql_contents
    WHERE serial_number = @Serial
END
GO

@Serial に既知の既存の値を指定して SSMS でこれを直接実行すると、期待どおりの結果が得られます。

(No column name)
1

Return Value
0

次のコードを使用して C# アプリで実行すると、result以下は常に 0 になります。

string unit_serial = "something"; // The same known existing value
SqlCommand comm = new SqlCommand("sp_IsUnitPackaged");
comm.CommandType = CommandType.StoredProcedure;
comm.Parameters.Add(new SqlParameter("@Serial", SqlDbType.VarChar)
{
    Value = unit_serial,
    Direction = ParameterDirection.Input,
    Size = 20
});

int result = 0;
using (SqlConnection conn = Utils.CONN) 
{
    conn.Open();
    using (comm)
    {
        comm.Connection = conn;
        Int32.TryParse(comm.ExecuteScalar().ToString(), out result);
    }
}

これと非常によく似た質問が他にもいくつか見られました。私が見つけた最良の答えは、ストアドプロシージャRETURNExecuteScalar. ご覧のとおり、私はそうではありません。

それで、私はここで何が欠けていますか?


RETURN 0更新: SSMSで実行したときに結果が1つしかないように、手順の最後にステートメントを追加しようとしました:

CREATE PROCEDURE [dbo].[sp_IsUnitPackaged] 
    @Serial varchar(20)
AS
BEGIN
    SET NOCOUNT ON
    SELECT COUNT(serial_number)
    FROM dbo.t_pql_contents
    WHERE serial_number = @Serial
    RETURN 0
END
GO

これを SSMS で実行すると、次の結果のみが得られます。

(No column name)
1

ただし、この手順の更新により、引き続きアプリで 0 のスカラー結果が得られます。

4

2 に答える 2

0

以下のようにクエリを更新します。それでも結果として 5 が表示されない場合は、C# コードに何らかの問題があります。それ以外の場合は、クエリに問題があります。

CREATE PROCEDURE [dbo].[sp_IsUnitPackaged] 
    @Serial varchar(20)
AS
BEGIN
    SET NOCOUNT ON
    SELECT 5
    FROM dbo.t_pql_contents
END
GO
于 2015-11-17T19:10:08.780 に答える
0

ああ。@usr がコメントで指摘したように (@AlexHn も続きます)、それはばかげたユーザー エラーであることが判明しました。どういうわけか、最初は彼らが私に何をするように求めていたのか、頭を包み込むことができませんでした。実行すると、パラメーターの値を間違って設定したことが明らかになり、実際には正確な結果 0 が返されました。

みんなにたくさんの謝罪!

[SO でどのようなエチケットが指示されているかわかりませんでした。@usr が指摘したように、実際の回答は提出されませんでした。自分で回答を見つけるのに役立つ提案のみです。チェックに値する人がいれば、それは @usr です。]

于 2015-11-18T14:43:00.073 に答える