1

ストアド プロシージャを実行した後、データセットがいっぱいになりません。

protected void btnsub_Click(object sender, EventArgs e)
{  
    ArrayList arInsert = ReturnParameter_insert();
    DataSet dsInsertProfile = objadmin.GetGridData(arInsert, objconstant.sSP_INSERT_PROFILE);

    if(int.Parse(dsInsertProfile.Tables[0].Rows[0].ItemArray[0].ToString())== 0)
    {
         lblThank.Text = "Your profile have been successfully saved.";
    }
    else
    {
        lblThank.Text = "Your profile is not saved, please try again later.";
    }
}

public ArrayList ReturnParameter_insert()
{
    ArrayList arProfile = new ArrayList();
    Object[] c_first_name = new object[3] { "@strFname", "Varchar", (txtfname.Text != "") ? txtfname.Text : "" };
    arProfile.Add(c_first_name);
    return arProfile;
}

public DataSet GetGridData(ArrayList dbArray, string sSpName)
{
        DataSet dsDataSet = new DataSet();
        dsDataSet = datamanager.GetGridData(dbArray, sSpName);
        return dsDataSet;
}

public static SqlDbType GetSqlDataType(string sDataType)
{
    return (sDataType == "Integer") ? SqlDbType.Int : (sDataType == "Varchar") ? SqlDbType.VarChar : (sDataType == "Date") ? SqlDbType.Date : SqlDbType.BigInt;
}

public static DataSet GetGridData(ArrayList dbArray, string sSpName)
{
        DataSet dsDataSet = new DataSet();
        SqlConnection cn = createConnection();
        SqlCommand cmd = new SqlCommand();
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.CommandText = sSpName;

        object objPrMtrName;
        object objSqlType;
        object objPrMtrVal;
        int i;

        for (i = 0; i < dbArray.Count; i++)
        {
            objPrMtrName = ((object[])(dbArray[i]))[0];
            objSqlType = ((object[])(dbArray[i]))[1];
            objPrMtrVal = ((object[])(dbArray[i]))[2];
            cmd.Parameters.Add(objPrMtrName.ToString(), GetSqlDataType(objSqlType.ToString())).Value = objPrMtrVal;
        }

        cmd.Connection = cn;

        try
        {
            SqlDataAdapter adp = new SqlDataAdapter(cmd);
            adp.Fill(dsDataSet);
            return dsDataSet;
        }
        catch (Exception ex)
        {
            throw ex;
        }
        finally
        {
            cn.Close();
            cn.Dispose();
        }
}

私のストアドプロシージャ:

CREATE Procedure spInsert_profile
    (@strFname  varchar(200))
AS
BEGIN
    INSERT INTO gdt_Users([c_first_name], [d_modified_dttm], [d_created_dttm])
    VALUES(@strFname, GETDATE(), GETDATE())
END

ここでは 3 層を使用しています。同じ方法が他のページでは正常に機能していますが、この特定のコードでは機能していません。GETGRIDDATA メソッドのデータセットに null 値が入力されています。私は見つけることができません。私を助けてください....

4

5 に答える 5

1

手順で挿入操作を実行すると、データに戻る方法よりもInsert into statement挿入操作ではなく取得操作が実行されます。

select *...データを取得するには、ステートメントでプロシージャを呼び出す必要があります。

于 2012-10-29T11:26:08.093 に答える
0

問題はストアド プロシージャにあります... DataSetで結果を返すには、ストアド プロシージャに select ステートメントを追加する必要があります。

于 2016-10-09T14:56:07.997 に答える
0

Insert Intoストアドプロシージャで使用するためです。

Tables プロパティに基づくアクセス:

SqlDataAdapter adp = new SqlDataAdapter(cmd);
adp.Fill(dsDataSet);
var table1 = dsDataSet.Tables[0];
var table2 = dsDataSet.Tables[1];

リンク: http://msdn.microsoft.com/fr-fr/library/system.data.dataset.tables.aspx

于 2012-10-29T13:01:22.510 に答える
0

ストアド プロシージャに select ステートメントがありません。adapter.fill() は、ストアド プロシージャの出力からある種のテーブルを受け取る必要があります。

于 2012-10-29T11:32:53.633 に答える
0

ここでわかることから、INSERT コマンドのみを実行するストアド プロシージャを実行しています。NULL 値を取得している理由は、UPDATE や INSERT などの非クエリ コマンドが通常、影響を受ける行数のみを返すためです。挿入したテーブルのデータではありません。

データを取り戻すには、挿入後に SELECT コマンドを実行する必要があります。

于 2012-10-29T11:33:21.917 に答える