-3

ユーザーが自分のでログインすると、次のコードのように次のページUserNameに送信します。UserNamePage_Load

 lblCmpUserName.Text = Server.UrlDecode(Request.QueryString["Parameter"].ToString());

次に、「会社の詳細」をUserNameとともにSQLServer2008テーブルに格納します。

エラーが発生しました

スカラー変数「@lblCmpUserName」を宣言する必要があります

コード:

    protected void BtnCmpApproval_Click(object sender, EventArgs e)
    {
       SqlConnection SqlCon = new SqlConnection(GetConnectionString());
       string query = "INSERT INTO Company_Info2 VALUES (@lblCmpUserName, @txtCmpName,  @txtRegCountry, @txtCmpRegNo, @txtCmpEstdate,@AFU1, @txtCmpAddress, @ddlAddrIn)";
       try
       {
          SqlCon.Open();

          SqlCommand cmd = new SqlCommand(query, SqlCon);
          cmd.CommandType = CommandType.Text;
          cmd.Parameters.AddWithValue("@UserName", lblCmpUserName.Text);
          cmd.Parameters.AddWithValue("@Cmp_Name", txtCmpName.Text);
          cmd.Parameters.AddWithValue("@Commercial_RegNo", txtRegCountry.Text);
          cmd.Parameters.AddWithValue("@Comm_Country", txtCmpRegNo.Text);
          cmd.Parameters.AddWithValue("@Cmp_EstablishDate", txtCmpEstdate.Text);
          cmd.Parameters.AddWithValue("@Cmp_DocPath", AFU1.FileName);
          cmd.Parameters.AddWithValue("@txtCmpAddress", txtCmpAddress.Text);
          cmd.Parameters.AddWithValue("@ddlAddrIn", ddlAddrIn.SelectedItem.Text);

          cmd.ExecuteNonQuery();
      }
      catch (Exception ex)
      {
         throw new Exception(ex.Message);
      }
      finally
      { 
         SqlCon.Close();
      }
    } 
4

4 に答える 4

2

上記のコードのように SqlCommand を記述すると、NET ランタイムに言っているようなものです。「ねえ、queryコマンド コレクションに存在するパラメーターのプレースホルダーを使用して、この文字列を SqlServer に送信しています。コレクションにあるパラメーター値でプレースホルダーを置き換えてください」. NET ランタイムは文字列でプレースホルダーを検索しますが、プレースホルダー @lblCmpUserName に対応するパラメーターがないため、問題が発生します。(NETは最初のもので止まりますが、最初のものの後にもっとたくさんあります)

@lblCmpUserName,   -> No match found 
@txtCmpName,       -> No match found
@txtRegCountry,    -> No match found
@txtCmpRegNo,      -> No match found
@txtCmpEstdate,    -> No match found
@txtCmpAddress,    -> Found match 
@ddlAddrIn         -> Found match 

パラメータ名と一致するようにプレースホルダを変更するか、プレースホルダと一致するようにパラメータ名を変更するという 2 つのオプションがあります。それはあなたの選択です。

また、文字列を解析するqueryと、NET ランタイムは、7 つのプレースホルダーと 8 つのパラメーターがあることに気付きます。これは別のエラーになります。パラメータを追加します@Cmp_DocPathが、文字列にはプレースホルダーがありません-

于 2012-06-16T10:41:07.517 に答える
2

これを試して

protected void BtnCmpApproval_Click(object sender, EventArgs e)
    {
    SqlConnection SqlCon = new SqlConnection(GetConnectionString());
    string query = "INSERT INTO Company_Info2 VALUES (@lblCmpUserName,@txtCmpName,
    @txtRegCountry,@txtCmpRegNo,@txtCmpEstdate,@txtCmpAddress,@ddlAddrIn)";
    try
    {
     SqlCon.Open();
     SqlCommand cmd = new SqlCommand(query, SqlCon);
     cmd.CommandType = CommandType.Text;
     cmd.Parameters.AddWithValue("@lblCmpUserName", lblCmpUserName.Text);
     cmd.Parameters.AddWithValue("@txtCmpName", txtCmpName.Text);
     cmd.Parameters.AddWithValue("@txtRegCountry", txtRegCountry.Text);
     cmd.Parameters.AddWithValue("@txtCmpRegNo", txtCmpRegNo.Text);
     cmd.Parameters.AddWithValue("@txtCmpEstdate", txtCmpEstdate.Text);
     cmd.Parameters.AddWithValue("@Cmp_DocPath", AFU1.FileName);

     cmd.Parameters.AddWithValue("@txtCmpAddress", txtCmpAddress.Text);
     cmd.Parameters.AddWithValue("@ddlAddrIn", ddlAddrIn.SelectedItem.Text);
     cmd.ExecuteNonQuery();
  }
  catch (Exception ex)
  {
     throw new Exception(ex.Message);
  }
  finally
  { 
           SqlCon.Close();
  }
  }

実際には、最後の 2 つを除いて、追加したパラメーターのどれもクエリに存在するパラメーターと一致しません。クエリで定義されたパラメーター & を使用してコマンドに追加されたパラメーター

cmd.Parameters.AddWithValue(...)

また

cmd.Parameters.Add(...)

そうしないと、確実にエラーが発生します。

于 2012-06-16T10:08:44.577 に答える
1
@lblCmpUserName

一致するものはありません

cmd.Parameters.AddWithValue("@UserName", lblCmpUserName.Text);

のライン@lblCmpUserName.

次の行を追加します。

 cmd.Parameters.AddWithValue("@lblCmpUserName",  lblCmpUserName.Text);

あなたはまだエラーを取得しようとしています。SQLステートメントに追加するたびに、一致する行@Parameterが必要です。cmd.Parameters.AddWithValue

于 2012-06-16T10:05:32.707 に答える
0

INSERT解決策を見つけました。クエリを間違えました。

このようにする必要があります。

string query="INSERT INTO Company_Info2 VALUES     (@UserName,@Cmp_Name,@Comm_Country,
    @Commercial_RegNo,@Cmp_DocPath,  
    @Cmp_EstablishDate,@Cmp_Address,@IsAddress)";
于 2012-06-17T07:05:48.200 に答える