2

テキストボックスにいくつかの値を入力していて、これらの値を SQL データベースに保存したいと考えています。今のところ、SQL StoredProcedure からの戻り値を MessageBox に表示して、挿入が成功したかどうかを示したいだけです。

送信ボタンのコード:

private void btnAdd_Click(object sender, RoutedEventArgs e)
{            
    if (txtType.Text.Length > 0 && txtNumber.Text.Length > 0 && txtLine1.Text.Length > 0)
    {
        string sOut = "";

        DataManager.SaveAddendum(txtType.Text, txtNumber.Text, txtLine1.Text, txtLine2.Text, txtLine3.Text, txtLine4.Text, sOut);

        MessageBox.Show(sOut);                
    }
}

送信ボタンによって呼び出されるデータ管理クラス:

public static void SaveAddendum(string sType, string sNumber, string sLine1, string sLine2, string sLine3, string sLine4, string sOut)
{
    // Create connection
    SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["ConString"].ToString());
    // Create command
    SqlCommand cmd = new SqlCommand();
    cmd.CommandType = CommandType.StoredProcedure;
    cmd.CommandText = "sp_Insert_Addendum";
    // Create and add input parameters
    cmd.Parameters.AddWithValue("@Type", sType);            
    cmd.Parameters.AddWithValue("@Number", sNumber);
    cmd.Parameters.AddWithValue("@Line1", sLine1);
    cmd.Parameters.AddWithValue("@Line2", sLine2);
    cmd.Parameters.AddWithValue("@Line3", sLine3);
    cmd.Parameters.AddWithValue("@Line4", sLine4);

    // Attach connection to command
    cmd.Connection = con;
    // Open connection
    con.Open();
    // Execute command
    //cmd.ExecuteNonQuery();
    sOut = cmd.ExecuteScalar().ToString();            
    // Close connection
    con.Close();
    // Dispose connection
    con.Dispose();
}

ストアド プロシージャ:

ALTER PROCEDURE [dbo].[sp_Insert_Addendum]
-- Add the parameters for the stored procedure here
@Type varchar(3),
@Number varchar(4),
@Line1 varchar(60),
@Line2 varchar(60),
@Line3 varchar(60),
@Line4 varchar(60)
AS
BEGIN   
SET NOCOUNT ON;
BEGIN

    IF EXISTS(SELECT Addendum_Type, Addendum_Number FROM AddendumMst WHERE Addendum_Type = @Type AND Addendum_Number = @Number)
    BEGIN           
        --PRINT N'The addendum already exists.
        SELECT 'Already Exists'
    END
    ELSE
    BEGIN
        INSERT INTO AddendumMst (Addendum_Type, Addendum_Number, Line1, Line2, Line3, Line4) VALUES (@Type, @Number, @Line1, @Line2, @Line3, @Line4)        
        IF @@ERROR <> 0 
        BEGIN               
            --PRINT N'An error occurred inserting the addendum information.';
            SELECT 'Error inserting'
        END
        ELSE
        BEGIN               
            --PRINT N'The addendum has been inserted.';             
            SELECT 'Success'
        END;
    END 
END
END

私の問題 - メッセージボックスに空白が表示されます。

4

3 に答える 3

4

あなたはSaveAddendum値を返さない方法です。 sOutメソッドに対してローカルです。値 (文字列) を返すようにメソッドを変更すると、それを MessageBox に表示できます。outまた、sOut は必要ないため、削除することもできます (パラメーターとして宣言しない限り、思っていることは実行されません)。

public static string SaveAddendum(string sType, string sNumber, string sLine1, string sLine2, string sLine3, string sLine4)
{

    // Your code

    return sOut;
}

次に、メソッドを呼び出すと、次のようなことができます。

string sOut = DataManager.SaveAddendum(txtType.Text, txtNumber.Text, txtLine1.Text, txtLine2.Text, txtLine3.Text, txtLine4.Text);

MessageBox.Show(sOut); 
于 2013-06-14T13:31:53.630 に答える
3

sOutパラメータを出力パラメータとして宣言する必要があります。

public static void SaveAddendum(string sType, string sNumber, string sLine1, string sLine2, string sLine3, string sLine4, out string sOut)

次のように呼び出します。

DataManager.SaveAddendum(txtType.Text, txtNumber.Text, txtLine1.Text, txtLine2.Text, txtLine3.Text, txtLine4.Text, out sOut);

問題とは関係ありませんがusing、接続の終了を処理するために使用することもお勧めします。

using(SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["ConString"].ToString())) {

    // . . . code

}

}置換する場所

con.Close();
con.Dispose();

コードが短くなり、例外が発生した場合でも接続が適切に閉じられることが保証されます。

于 2013-06-14T13:31:45.347 に答える
0

SaveAddendum プロシージャのパラメータ sOut を「ref」でマークする必要があると思います。それ以外の場合、メソッドは、このパラメーターに割り当てられた値を返す必要があることを知りません。しかし、void を返す代わりに、SaveAddendum からこのパラメーターを返す方がはるかに優れた設計です。

于 2013-06-14T13:32:02.620 に答える