0

特定のページに挿入するためにMS-Sqlのストアプロシージャを使用しましたが、正常に動作していますが、エラーを見つけている他のページにも同じストアプロシージャが必要です。

protected void btnsubmitt_Click(object sender, EventArgs e)
{
    ArrayList arParameters = ReturnParameter();
    DataSet dsInsertProfile = objadmin.GetGridData(arParameters,                    objconstant.sSP_INSERT_PROFILE);

    if (int.Parse(dsInsertProfile.Tables[0].Rows[0].ItemArray[0].ToString()) == 0)
    {
        pnlProfile.Visible = false;
        pnlThank.Visible = true;
        lblThank.Text = "Your profile have been successfully saved.";
    }

    else
    {
        lblThank.Text = "Your profile is not saved, please try again later.";
    }

}
public ArrayList ReturnParameter()
{
    Int64 email = Convert.ToInt64(txtemail.Text.ToString());
    ArrayList arSample = new ArrayList();
    Object[] c_email_id = new Object[3] { "@strEmailID", "varchar", email};
     arSample.Add(c_email_id);
     return arSample;
}
  public DataSet GetGridData(ArrayList dbArray, string sSpName)
    {
        DataSet dsDataSet = new DataSet();
        dsDataSet = datamanager.GetGridData(dbArray, sSpName);
        return dsDataSet;
    }
    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();
        }
    }

マイストア手順

ALTER Procedure [dbo].[spInsert_profile]
(  @strEmailID varchar(200)

)
 AS
BEGIN
    DECLARE @intEmail INT
SET @intEmail = (SELECT COUNT(*) FROM gdt_Users WHERE [c_email_id]=@strEmailID)        
IF @intEmail = 0
 BEGIN

       Insert into gdt_Users([c_email_id],[d_modified_dttm],[d_created_dttm])values(@strEmailID,GETDATE(),GETDATE())

 SELECT @intEmail
  END
ELSE
    BEGIN
        SELECT @intEmail

    END
END

ここで、私は問題に直面していました。例外をスローしていました

ERROR: Failed to convert parameter value from string to Int64 

だから、私はこのコードを追加しました

Int64 email = Convert.ToInt64(txtemail.Text.ToString());

arraylistreturnparameter()メソッドで。次に、その例外をスローしました

ERROR: Input string was not in correct format

どうすればこれを解決できますか? 手伝って頂けますか?

4

2 に答える 2

0

あなたのコードでは、Convert.ToInt64 を 1 か所でしか見つけることができません。

Int64 email = Convert.ToInt64(txtemail.Text.ToString());

有効な数値を Convert.ToInt64( に渡すことはできませんtxtemail。数値ではなく文字列が含まれるためです。txtemail で数値を指定するか、正しいテキスト ボックスを使用して文字列を int64 に変換する必要があります。

Convert.ToInt64( は、文字列が数値の場合にのみ文字列を数値に変換することに注意してください。

于 2012-11-02T07:52:21.290 に答える
0

ストアド プロシージャは長さが 200 にvarchar(200)相当することを想定しているため、メールは数値ではなく文字列である必要があります。Stringたとえば、yourname@someemail.com は文字列です。ただ興味がありますint64。そのはず

string email = txtemail.Text;

ここのコードはemail、使用して文字列にする必要があることを示しています"varchar"

string email = txtemail.Text; //change your code to this
ArrayList arSample = new ArrayList();
Object[] c_email_id = new Object[3] { "@strEmailID", "varchar", email};
于 2012-11-02T08:48:30.950 に答える